`

浅析轮询(Polling)和推送(Long-Polling)服务

    博客分类:
阅读更多
实时 Web 应用的窘境
Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事,但是对于那些实时要求比较高的应用来说,比如说在线游戏、在线证券、设备监控、新闻在线播报、RSS 订阅推送等等,当客户端浏览器准备呈现这些信息的时候,这些信息在服务器端可能已经过时了。所以保持客户端和服务器端的信息同步是实时 Web 应用的关键要素,对 Web 开发人员来说也是一个难题。在 WebSocket 规范出来之前,开发人员想实现这些实时的 Web 应用,不得不采用一些折衷的方案,其中最常用的就是轮询 (Polling) 和 Comet 技术,而 Comet 技术实际上是轮询技术的改进,又可细分为两种实现方式,一种是长轮询机制,一种称为流技术。下面我们简单介绍一下这几种技术:
轮询:
这是最早的一种实现实时 Web 应用的方案。客户端以一定的时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务器端的同步。这种同步方案的最大问题是,当客户端以固定频率向服务器发起请求的时候,服务器端的数据可能并没有更新,这样会带来很多无谓的网络传输,所以这是一种非常低效的实时方案。
轮询(Polling)是指不管服务器端有没有更新,客户端(通常是指浏览器)都定时的发送请求进行查询,轮询的结果可能是服务器端有新的更新过来,也可能什么也没有,只是返回个空的信息。不管结果如何,客户端处理完后到下一个定时时间点将继续下一轮的轮询。                                   
推送或叫长连接(Long-Polling)的服务其客户端是不做轮询的,客户端在发起一次请求后立即挂起,一直到服务器端有更新的时候,服务器才会主动推送信息到客户端。 在服务器端有更新并推送信息过来之前这个周期内,客户端不会有新的多余的请求发生,服务器端对此客户端也啥都不用干,只保留最基本的连接信息,一旦服务器有更新将推送给客户端,客户端将相应的做出处理,处理完后再重新发起下一轮请求。分为长轮询和流2种:
长轮询:
长轮询是对定时轮询的改进和提高,目地是为了降低无效的网络传输。当服务器端没有数据更新的时候,连接会保持一段时间周期直到数据或状态改变或者时间过期,通过这种机制来减少无效的客户端和服务器间的交互。当然,如果服务端的数据变更非常频繁的话,这种机制和定时轮询比较起来没有本质上的性能的提高。
流:
流技术方案通常就是在客户端的页面使用一个隐藏的窗口向服务端发出一个长连接的请求。服务器端接到这个请求后作出回应并不断更新连接状态以保证客户端和服务器端的连接不过期。通过这种机制可以将服务器端的信息源源不断地推向客户端。这种机制在用户体验上有一点问题,需要针对不同的浏览器设计不同的方案来改进用户体验,同时这种机制在并发比较大的情况下,对服务器端的资源是一个极大的考验。
举个例子说明下就很清楚了:

轮询模式,假设是客户端每2秒轮询一次,那么客户端每2秒就会发送一次请求,相应的服务器端每2秒就要响应这个客户端的一次请求。而实际上服务器端可能1秒钟后就有更新,也可能1分钟后才有更新。对于1秒钟就有更新的,客户端至少会有1秒钟的延时;而1分钟后才有更新的,只有最后一次查询有意义,这一分钟内的轮询其实都是没有必要的,服务器端和客户端均有资源的浪费。
推送模式,客户端发送一次请求后马上挂起等待服务器端响应,可能1秒,也可能10秒钟,也可能1分钟。如果服务器端是1秒就有更新,那么到1秒钟时客户端马上就收到更新了,如果是1分钟才有更新,那么整个一分钟客户端也只请求一次,服务器也只会相应一次,这个跟轮询的区别是不是已经很清楚了。
综合这几种方案,您会发现这些目前我们所使用的所谓的实时技术并不是真正的实时技术,它们只是在用 Ajax 方式来模拟实时的效果,在每次客户端和服务器端交互的时候都是一次 HTTP 的请求和应答的过程,而每一次的 HTTP 请求和应答都带有完整的 HTTP 头信息,这就增加了每次传输的数据量,而且这些方案中客户端和服务器端的编程实现都比较复杂,在实际的应用中,为了模拟比较真实的实时效果,开发人员往往需要构造两个 HTTP 连接来模拟客户端和服务器之间的双向通讯,一个连接用来处理客户端到服务器端的数据传输,一个连接用来处理服务器端到客户端的数据传输,这不可避免地增加了编程实现的复杂度,也增加了服务器端的负载,制约了应用系统的扩展性。
分享到:
评论

相关推荐

    服务器推送示例 - IE/火狐/谷歌 长链防断实用版

    总之,这个“服务器推送示例 - IE/火狐/谷歌 长链防断实用版”是一个针对多浏览器环境优化的解决方案,特别是解决了IE浏览器长连接易断的问题,提供了稳定、高效的服务器到客户端的数据推送服务。通过深入理解并应用...

    服务器推送示例-支持IE火狐谷歌等 - 更新后

    在ASP.NET中实现服务器推送,通常采用两种主要方法:长轮询(Long Polling)和WebSocket。 1. 长轮询:这是一种模拟双向通信的技术,客户端发起一个HTTP请求,服务器保持连接打开状态,直到有新数据可用时才返回。...

    long_polling_select.zip--Oracle数据库LONG类型字段的完整C代码(POLLING SELECT)

    Oracle数据库LONG类型字段的完整C代码操作(CREATE INSERT SELECT DROP)之六--分段轮询SELECT;免费下载有猫彬为你准备的代码包(已编译好,可直接运行,内含编译运行命令,直接复制粘贴即可

    long_polling_insert.zip--Oracle数据库LONG类型字段的完整C代码(POLLING INSERT)

    Oracle数据库LONG类型字段的完整C代码操作(CREATE INSERT SELECT DROP)之五--分段轮询INSERT;免费下载有猫彬为你准备的代码包(已编译好,可直接运行,内含编译运行命令,直接复制粘贴即可

    Ajax-ajax-long-polling-chat.zip

    Ajax-ajax-long-polling-chat.zip,简单的php 长轮询聊天webapp。,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载...

    S7-200SMART Modbus轮询应用库(使用说明+库文件).zip

    轮询时间间隔和从站数量影响整个网络的响应速度,合理设置能确保系统的稳定运行。 4. S7-200SMART Modbus轮询库文件: 提供的"SMART Modbus轮询的应用库"包含了实现这一功能的库文件。这些库函数通常包括初始化、...

    关于心跳程序-Web 通信之长连接、长轮询(long polling)

    长轮询的实现主要包括建立轮询、数据推送、轮询终止和重建四个步骤: 1. 客户端发起请求,进入等待状态。 2. 服务器检测到数据更新,发送响应并断开连接。 3. 轮询可能因数据推送、超时或网络异常终止。 4. 客户端...

    国内推送软件-个推

    信息推送技术的核心在于有效地传递信息,而个推采用了长连接的方式,相比于轮询和SMS推送,这种方法更节省用户的电量和流量,因为应用只需要偶尔向服务器发送请求,而不是持续不断地查询。个推的突出优点在于客户端...

    php-long-polling:一个使用长轮询的“实时”自更新页面的极其简单的例子

    php长轮询使用 AJAX (jQuery) 和 PHP 进行长轮询的非常简单的演示。...如何使用要测试,只需将 client/client.js 中的 URL 更改为 server.php 文件的位置,对于本地测试url: 'http://127.0.0.1/php-long-polling/serve

    S7-200PLC-Modbus RTU通信轮询-主站读写程序示例.rar

    标题中的"S7-200PLC-Modbus RTU通信轮询-主站读写程序示例"指的是使用Siemens S7-200系列的PLC通过Modbus RTU协议实现通信轮询功能的主站读写程序实例。在工业自动化系统中,S7-200 PLC是一款广泛应用的小型PLC,而...

    消息推送,轮询,消息通知

    消息推送、轮询和消息通知是互联网应用中用于实时数据交互的重要技术,它们在提高用户体验、保持用户活跃度以及提供即时服务方面起着至关重要的作用。以下是对这些概念的详细阐述: **消息推送** 消息推送是指应用...

    Flex与Java的消息推送

    BlazeDS支持两种主要的推送机制:Polling和Long-Polling,以及更高级的WebSocket。 1. **Polling**:客户端定期向服务器发送请求,询问是否有新数据。如果有,服务器立即返回数据;如果没有,则可能等待一段时间后...

    Web-服务器推送WebSocketandAjax轮询.docx

    在WebSocket出现之前,实现服务器推送的一种常见方式是Ajax轮询。这种方式是客户端定期发送请求到服务器,询问是否有新数据。这种方法效率低,因为即使没有新数据,也会频繁发送请求。相比之下,WebSocket一旦建立...

    消息推送实例

    为了解决这个问题,出现了长轮询(Long Polling)、WebSocket、Server-Sent Events (SSE) 等技术,它们允许服务器在有新数据时主动推送给客户端,实现了真正的双向通信。 RTPollingDemo-master中的“RTPolling”...

    数据推送flex

    在Flex中,数据推送主要涉及两种机制:Polling和Push。Polling是传统的请求-响应模式,客户端定时向服务器发送请求获取更新的数据,而Push则允许服务器主动将新数据推送到客户端,无需客户端不断询问。 1. Polling...

    ajax推送技术,php实现

    数据推送通常分为两种模式:轮询(Polling)和长轮询(Long Polling),压缩包中的"LongPoll"可能就是关于长轮询的一个示例。 1. **Ajax基础**: - Ajax的核心是XMLHttpRequest对象,它允许JavaScript向服务器发送...

    S7-200 SMART MODBUS轮询程序的示例及具体使用方法的解释说明.rar

    《S7-200 SMART MODBUS轮询程序详解与应用指南》 ...通过合理的轮询策略和错误处理机制,可以有效地提升系统的稳定性和可靠性,实现高效的数据交换。在实践过程中,应不断学习和优化,以满足复杂工业环境中的各种需求。

    java消息推送

    - 消息推送主要依赖于两种机制:长连接(Long-Polling)和WebSocket。长连接是通过保持HTTP连接开放,直到有新消息时才关闭,从而减少网络延迟。WebSocket则提供双向通信,允许服务器主动向客户端发送数据。 2. ...

    ServerPush(服务器推送)

    1. 长期轮询(Long-Polling): 长期轮询是最早的服务器推送技术之一,它通过延长HTTP请求的生命周期来模拟推送。客户端发起请求后,服务器不会立即响应,而是保持连接直到有新的数据可推送给客户端,或者达到预设...

    U盟消息推送_phpios推送_php安卓推送_thinkphp推送

    在IT行业中,消息推送是一项关键的技术,特别是在移动应用开发中,它允许服务器向客户端实时发送信息,无需客户端持续轮询。本主题主要关注"U盟消息推送"、"phpiOS推送"、"php安卓推送"以及"thinkPHP推送"这四个关键...

Global site tag (gtag.js) - Google Analytics