`
usenrong
  • 浏览: 516844 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

http长轮询&短轮询

    博客分类:
  • J2EE
 
阅读更多

http 协议介绍:

http 协议是请求/响应范式的, 每一个 http 响应都是由一个对应的 http 请求产生的; http 协议是无状态的, 多个 http 请求之间是没有关系的.

http 长连接:

目前 http 协议普遍使用的是 1.1 版本, 之前有个 1.0 版本, 两者之间的一个区别是 1.1 支持http 长连接, 或者叫持久连接.1.0 不支持 http 长连接, 每次一个 http 请求响应后都关闭 tcp 连接, 下个 http 请求会重新建立 tcp 连接.

所谓 http 长连接, 就是多个 http 请求共用一个 tcp 连接; 这样可以减少多次临近 http 请求导致 tcp 建立关闭所产生的时间消耗. http 1.1 中在请求头和相应头中用 connection字段标识是否是 http 长连接, connection: keep-alive, 表明是 http 长连接; connection:closed, 表明服务器关闭 tcp 连接

与 connection 对应的一个字段是 keep-live, http 响应头中出现, 他的格式是 timeout=30, max=5, timeout 是两次 http 请求保持的时间(s), , max 是这个 tcp 连接最多为几个 http 请求重用

http 长轮询:

http 长轮询是服务器收到请求后如果有数据, 立刻响应请求; 如果没有数据就会 hold 一段时间, 这段时间内如果有数据立刻响应请求; 如果时间到了还没有数据, 则响应 http 请求;浏览器受到 http 响应后立在发送一个同样 http 请求查询是否有数据;

http 长轮询的局限:

  1. 浏览器端对统一服务器同时 http 连接有最大限制, 最好同一用户只存在一个长轮询;
  2. 服务器端没有数据 hold 住连接时会造成浪费, 容易产生服务器瓶颈;

http 短轮询:

http端轮询是服务器收到请求不管是否有数据都直接响应 http 请求; 浏览器受到 http 响应隔一段时间在发送同样的 http 请求查询是否有数据;

http 短轮询的局限是实时性低;

两者相同点:
可以看出 http 长轮询和 http 短轮询的都会 hold 一段时间;

两者不同点
间隔发生在服务端还是浏览器端: http 长轮询在服务端会 hold 一段时间, http 短轮询在浏览器端 “hold” 一段时间;

应用:

长轮询一般用在 web im, im 实时性要求高, http 长轮询的控制权一直在服务器端, 而数据是在服务器端的, 因此实时性高;
像新浪微薄的im, 朋友网的 im 以及 webQQ 都是用 http 长轮询实现的;
NodeJS 的异步机制貌似可以很好的处理 http 长轮询导致的服务器瓶颈问题, 这个有待研究.

http 短轮询一般用在实时性要求不高的地方, 比如新浪微薄的未读条数查询就是浏览器端每隔一段时间查询的.

其他:

关于 http 长连接一个误解就是服务器主动推送数据, 这个在 http 协议下是无法实现的, 因为 http 请求/响应范式决定的, http 中服务器返回数据必须要有一个浏览器端的请求对应, 服务器无法主动推送给浏览器数据.
不管 http 长轮询还是 http 短轮询 保证同一个用户在多 tab 下只存在一个定时查询是有好处的, 这可以通过在浏览器端缓存数据解决, 在 http 响应后在浏览器端缓存数据, 并设置一个有效期, 然后在每次发送 http 请求时检查是否有有效数据, 没有则发送请求获取

分享到:
评论
1 楼 usenrong 2012-10-09  
很多应用譬如监控、即时通信、即时报价系统都需要将后台发生的变化实时传送到客户端而无须客户端不停地刷新、发送请求。本文首先介绍、比较了常用的“服务器推”方案,着重介绍了 Comet - 使用 HTTP 长连接、无须浏览器安装插件的两种“服务器推”方案:基于 AJAX 的长轮询方式;基于 iframe 及 htmlfile 的流方式。最后分析了开发 Comet 应用需要注意的一些问题,以及如何借助开源的 Comet 框架-pushlet 构建自己的“服务器推”应用。
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/#N1018B

相关推荐

    asp.net+jquery长轮询实例

    ASP.NET与jQuery结合实现的长轮询实例是一个高效的数据实时更新技术,主要用于创建实时交互的Web应用程序。在传统的HTTP协议中,服务器与客户端之间采用的是请求-响应模型,即客户端发送请求,服务器处理请求并返回...

    php-Ajax长轮询

    如果请求成功(HTTP状态码为200),则解析返回的数据并进行处理,然后设置一个延时(通常为0,表示立即)再次调用`longPolling`,以发起新的长轮询请求。 **优点与缺点** 长轮询相对于其他实时通信技术(如...

    web即时聊天(ajax长轮询方式实现)

    长轮询不同于传统的短轮询,它减少了不必要的请求次数,提高了效率。在Web即时聊天场景中,服务器不会立即响应客户端的请求,而是等待一段时间,或者直到有新消息为止。这种方式避免了频繁的请求导致的网络拥堵,...

    基于 AJAX和Webservice 的长轮询方式ServerPush技术模拟

    **长轮询(Long Polling)** 是一种模拟即时通信的策略,不同于短轮询,它会保持一个请求连接直到有新数据可用。当服务器端接收到客户端的请求后,如果暂时没有新数据,它不会立即返回响应,而是等待,直到有新数据...

    长轮询查看服务器cpu的利用率

    在IT行业中,长轮询(Long Polling)是一种常见的实现实时通信的技术,尤其适用于服务器向客户端推送更新数据的场景。本示例中的“长轮询查看服务器CPU的利用率”是利用Ajax与Struts2框架结合,来实现实时监控服务器...

    asp.net 2.0 聊天室 长轮询 异步实现

    在ASP.NET 2.0中实现长轮询,我们通常需要创建一个HTTP Handler(.ashx文件)或者一个自定义的HTTP Module来处理这些持久连接。客户端会持续发送请求到服务器,服务器会将请求挂起,直到有新消息时才返回,或者达到...

    cpp-NGINXHTTP长轮询模块

    multi-worker HTTP发布/订阅流 接收通过HTTP POST的任意实时数据 将它传递给所有实时等待相同密钥的HTTP GET客户端 可用于MPEG-TS直播或HTTP推送

    golongpoll:golang长轮询库。 通过HTTP长轮询服务器和客户端使Web发布订阅变得容易

    通过HTTP长轮询服务器和客户端使Web发布订阅变得容易。 支持golang v1.9及更高版本。 资源 -显示如何使用longpoll服务器和go / js客户端。 如果您想创建自己的客户端。 快速开始 要创建longpoll服务器,请执行以下...

    ASP.NET+MVC+JQ长轮询实例

    在传统的Ajax短轮询中,客户端定时向服务器发送请求检查新数据,即使没有新数据也会立即返回,这可能导致不必要的网络开销。而长轮询则不同,当客户端发送请求后,服务器会保持连接直到有新数据或超时,然后才返回...

    http长轮询技术comet的实现

    <Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> 2.需要在tomcat的context.xml里面配置 在Context标签里面配置: ...

    长轮询Prototype+comet源代码

    长轮询(Long Polling)和Comet技术是Web实时通信(Real-Time Web Communication)中的两种重要机制,它们主要用于实现服务器向客户端的即时数据推送,而不再局限于传统的HTTP请求-响应模式。在本文中,我们将深入...

    PHP+Ajax实现在线聊天长轮询

    这种方式保证了数据的实时性,避免了短轮询带来的频繁请求和延迟问题。 **四、实现步骤** 1. **创建数据库和表结构**:首先,你需要设置一个数据库来存储聊天记录,包括用户ID、消息内容和时间戳等字段。 2. **PHP...

    vb6 modbus 轮询读取 接收数据长度正确后再轮询

    本话题主要关注如何使用VB6实现Modbus轮询读取功能,并在接收到正确的数据长度后进行下一轮的轮询,同时将接收到的数据依次写入到三个TextBox控件中。 首先,我们需要了解Modbus的基本概念。Modbus协议定义了一种主...

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

    【长连接】与【长轮询】是Web通信中实现“服务器推”技术的两种策略,它们主要用于增强程序的实时性和交互性,弥补HTTP请求-响应模式的不足。长连接是指客户端与服务器保持长时间的连接状态,使得数据能即时传递。而...

    S7-200SMART进行MODBUS轮询卡死时重新开启轮询的具体方法.docx

    然而,在进行MODBUS通信轮询时,可能会遇到轮询卡死的情况,即PLC无法按照预设顺序执行通信任务。本文将详细介绍如何在S7-200SMART PLC中检测和处理轮询卡死问题,以及如何重新开启轮询。 首先,理解轮询机制是关键...

    c# 实现轮询算法实例代码

    在C#编程中,轮询算法是一种常用的策略,它用于在多个选项或资源之间均匀分配注意力或处理。在这个实例中,轮询算法被用来决定在用户访问页面时,一段特定的代码(例如曝光代码)是否按照预设的概率显示。下面我们将...

    单片机 程序架构 时间片轮询. 时间片轮询..pdf

    通常情况下,时间紧迫度高的任务会获得更短的时间片,以保证其能够在限定时间内完成关键操作。 3. **程序设计与实现**:在程序中设置一个主循环结构,循环体内部按照预定的时间片顺序执行各个任务。每个任务执行完成...

    S7-200SMART-modbusRTU轮询程序(读轮询+写优先)附使用说明.zip

    《S7-200SMART Modbus RTU轮询程序详解及使用指南》 在工业自动化领域,西门子的S7-200SMART系列PLC因其小巧、灵活、功能强大而广受青睐。本篇文章将深入探讨如何在S7-200SMART PLC上实现Modbus RTU协议的轮询程序...

Global site tag (gtag.js) - Google Analytics