Comet 实现的方法

原创 2011年01月19日 12:03:00

Comet 实现的方法

  • 简单轮询

    最早期的 Web 应用中,主要通过 JavaScript 或者 Meta HTML 标签等手段,定时刷新页面来检测服务端的变化。显然定时刷新页面服务端仍然在被动响应客户端的请求,只不过客户端的请求是连续、频繁的,让用户看起来产生 有服务端自动将信息发过来的错觉。这种方式简单易行,但缺陷也非常明显:可能大部分请求都是无意义的,因为服务端期待的事件没有发生,实际上并没有需要发 送的信息,而不得不重复的回应着页面上所有内容给浏览器;另外就是当服务端发生变化时,并不能“实时”的返回,刷新的间隔太短,产生很大的性能浪费,间隔 太长,事件通知又可能晚于用户期望的时间到达。

    当绝大部分浏览器提供了 XHR(XmlHttpRequest)对象支持后,Ajax 技术出现并迅速流行,这一阶段做的轮询就不必每次都返回都返回整个页面中所有的内容,如果服务端没有事件产生,只需要返回极少量内容的 http 报文体。Ajax 可以节省轮询传输中大量的带宽浪费,但它无法减少请求的次数,因此 Ajax 实现的简单轮询仍然有轮询的局限性,对其缺陷只能一定程度缓解,而无法达到质变。

  • 长轮询(混合轮询)

    长轮询与简单轮询的最大区别就是连接时间的长短:简单轮询时当页面输出完连接就关闭了,而长轮询一般会保持 30 秒乃至更长时间,当服务器上期待的事件发生,将会立刻输出事件通知到客户端,接着关闭连接,同时建立下一个连接开始一次新的长轮询。

    长轮询的实现方式优势在于当服务端期待事件发生,数据便立即返回到客户端,期间没有数据返回,再较长的等待时间内也没有新的请求发生,这 样可以让发送的请求减少很多,而事件通知的灵敏度却大幅提高到几乎是“实时”的程度。

  • Comet 流(Forever Frame)

    Comet 流是按照长轮询的实现思路进一步发展的产物。令长轮询将事件通知发送回客户端后不再关闭连接,而是一直保持直到超时事件发生才重新建立新的连接,这种变体 我们就称为 Comet 流。客户端可以使用 XmlHttpRequest 对象中的 readyState 属性来判断是 Receiving 还是 Loaded。Comet 流理论上可以使用一个链接来处理若干次服务端事件通知,更进一步节省了发送到服务端的请求次数。

无论是长轮询还是 Comet 流,在服务端和客户端都需要维持一个比较长时间的连接状态,这一点在客户端不算什么太大的负担,但是服务端是要同时对多个客户端服务的,按照经典 Request-Response 交互模型,每一个请求都占用一个 Web 线程不释放的话,Web 容器的线程则会很快消耗殆尽,而这些线程大部分时间处于空闲等待的状态。这也就是为什么 Comet 风格服务非常期待异步处理的原因,希望 Web 线程不需要同步的、一对一的处理客户端请求,能做到一个 Web 线程处理多个客户端请求。

基于 Asp.Net的 Comet 技术解析

基于 Asp.Net的 Comet 技术解析
  • u010243043
  • u010243043
  • 2015年01月29日 16:52
  • 566

Spring整合DWR comet 实现无刷新 多人聊天室

用dwr的comet(推)来实现简单的无刷新多人聊天室,comet是长连接的一种。通常我们要实现无刷新,一般会使用到Ajax。Ajax 应用程序可以使用两种基本的方法解决这一问题:一种方法是浏览器每隔...
  • z69183787
  • z69183787
  • 2014年03月17日 13:29
  • 1447

java web 服务器推送技术 comet实现(原理)

最近研究服务器推送技术,
  • fengge374043291
  • fengge374043291
  • 2014年07月17日 09:50
  • 6728

Comet入门及最简单的Java Demo

在浏览网页的时候,如果有新的消息,如何接收到?HTTP协议不能由服务器主动给客户端发送消息。1、刷微博、逛论坛贴吧,想看最新的信息怎么办?F5刷新一下就OK了!2、上面一种方式是被动的,如果用户不去刷...
  • xiao__gui
  • xiao__gui
  • 2014年08月01日 10:13
  • 4411

HTTP长连接(Comet)实现方式示例

昨天看了comet的介绍后,虽然大概知道了comet的原理,不过没实际用过还是不太清楚,于是今天又在网上翻了一下别的网友共享的comet实现http长连接的例子,在 Comet Server Push...
  • z69183787
  • z69183787
  • 2014年03月17日 09:22
  • 2240

消息推送框架 Comet4J

开发指南  Featured, Phase-Implementation  zh-Hans, en-US Updated Jul 12, 2011 by jinghai....@gmail....
  • neutrojan
  • neutrojan
  • 2014年12月25日 19:08
  • 3775

java comet 长轮询的案例

这个案例主要是java的comet 长轮询功能的实现,看到网上的案例只是从后台推送消息到前端,而且很多都是(iframe, 流的方式), 很难找到从客户端发送消息到服务器端,服务器端接收到消息之后推送...
  • xingyakai
  • xingyakai
  • 2016年05月19日 09:54
  • 3781

关于跨域(补充并添加comet和web sockets知识)

Ajax,即Asynchronous Javascript+XML的核心是XMLHttpRequest对象,能够向服务器请求额外的数据而无需卸载页面,会带来更好的用户体验。 一、关于XMLHttpRe...
  • u012841667
  • u012841667
  • 2016年11月01日 21:45
  • 341

轮询,长轮询,长连接以及comet概念的剖析

Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流(长连接流)。 推送技术,又名反向AJAX,指的是一种...
  • qq_25310669
  • qq_25310669
  • 2015年04月11日 18:27
  • 1515

Ajax与Comet的介绍与区别

Ajax(Asynchronous JavaScript + XML的简写)可以向服务器请求数据而无需卸载(刷新)页面,带来更好的用户体验。  Ajax技术的核心是XMLHttpRequest对象(...
  • hj7jay
  • hj7jay
  • 2016年04月20日 09:31
  • 2026
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Comet 实现的方法
举报原因:
原因补充:

(最多只允许输入30个字)