转自 http://ququzone.blogbus.com/logs/40856736.html
http://www.zeitoun.net/articles/comet_and_php/start
http://hi.baidu.com/xfuajiao/blog/item/4e3c6bce41423131f8dc61f0.html
http://hi.baidu.com/liupras/blog/item/61dd09f529dfc32ebd310945.html
Comet技术的两种实现:基于AJAX长轮询的方式和基于iframe及htmlfile流的方式。
一、基于AJAX轮询方式与传统AJAX方式的区别:
1. 服务器端会阻塞请求直到有数据传递或超时才返回。
2. 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。
采用这种方式实现的技术有meboo和pushlet chat。
二、基于iframe及htmlfile流的方式
这个方式和AJAX方式原理相同,只是浏览器一直会显示正在连接状态,gtalk采用htmlfile技术解决了此问题。Zeitoun 网站提供的 comet-iframe.tar.gz,封装了一个基于 iframe 和 htmlfile 的 JavaScript comet 对象,支持 IE、Mozilla Firefox 浏览器,可以作为参考:http://www.zeitoun.net/articles/comet_and_php/start
三、Http长连接的编程原则
1、不要在同一个客户端开启超过两个的http长连接,这个是受http协议限制的。
2、控制信息和数据信息使用不同的http连接。
3、在客户端和服务器端保持“心跳”信息。
四、Pushlet框架学习
Pushlet框架是用后台采用java实现,前台技术有AJAX和Iframe两种。设计思想采用观察者模式。
Comet 指的是一种 Web 应用程序的架构。在这种架构中,客户端程序(通常是浏览器)不需要显式的向服务器端发出请求,服务器端会在其数据发生变化的时候主动的将数据异步的发送给客户端,从而使得客户端能够及时的更新用户界面以反映服务器端数据的变化。
这种架构既不同于传统的 Web 应用,也不同于新兴的 Ajax 应用。在传统的 Web 应用中,通常是客户端主动的发出请求,服务器端生成整个 HTML 页面交给客户端去处理。在 Ajax 应用中,同样是客户端主动的发出请求,只是服务器通常返回的是 XML 或是 JSON 格式的数据,然后客户端使用这些数据来对页面进行局部更新。Comet 架构非常适合事件驱动的 Web 应用和对交互性和实时性要求很强的应用。这样的应用的例子包括实时监控、多人在线协作、股票行情分析、聊天室和 Web 版在线游戏等。
基于 Comet 架构的 Web 应用使用客户端和服务器端之间的 HTTP 长连接来作为数据传输的通道。每当服务器端的数据因为外部的事件而发生改变时,服务器端就能够及时把相关的数据推送给客户端。通常来说,有两种实现长连接的策略:
HTTP 流(HTTP Streaming)
这种情况下,客户端打开一个单一的与服务器端的 HTTP 持久连接。服务器通过此连接把数据发送过来,客户端增量的处理它们。
HTTP 长轮询(HTTP Long Polling)
这种情况下,由客户端向服务器端发出请求并打开一个连接。这个连接只有在收到服务器端的数据之后才会关闭。服务器端发送完数据之后,就立即关闭连接。客户端则马上再打开一个新的连接,等待下一次的数据。
分享到:
相关推荐
Comet技术主要有两种实现方式: 1. 长轮询(Long Polling):客户端发送一个HTTP请求到服务器,服务器保持连接不关闭,直到有新的数据可用或超时才返回响应。这样,一旦服务器有新的消息,可以立即推送给客户端,...
Pushlet技术是Comet思路的具体实现,它支持长轮询和流方式两种Comet技术。Pushlet提供JavaScript库,使得开发者能够方便地在客户端使用AJAX或iframe来实现这两种推送机制。Pushlet使用了观察者模式,客户端订阅感...
由于HTTP协议本身的限制,Comet采用了两种主要的实现策略:长轮询(Long-Polling)和流(Streaming)。 **1. 长轮询(Long-Polling)** 长轮询是一种模拟双向通信的技巧。客户端向服务器发起一个请求,但服务器不...
在Java中,可以通过两种主要的方式来实现Comet:HTTP流和HTTP块。 1. HTTP流(Streaming):服务器在响应头中设置"Content-Length"为未知,然后保持连接开放,当有新数据时,就向连接中写入数据。这种方式适合推送...
Comet技术的出现解决了这一问题,它可以分为单向Comet和双向Comet两种类型。单向Comet通常是指服务器向客户端推送数据,而双向Comet,也称为WebSocket,允许客户端和服务器之间双向通信,实现更复杂的实时应用。 在...
Comet技术主要有两种实现方式: 1. 长轮询(Long Polling):客户端发起一个HTTP请求,服务器接收到请求后不立即返回,而是保持连接状态,直到有新数据可推送给客户端或超时才关闭连接。客户端接收到数据后立即重新...
Comet技术有两种实现方式:长轮询方式(Long Pollling)和流方式(Streaming)。 长轮询方式是指客户端不断地向服务器发送请求,服务器端会阻塞请求,直到服务器端有一个事件触发或者到达超时。客户端在收到响应后...
Comet技术主要利用了HTTP的持久连接特性,主要有两种实现方式:HTTP长轮询和HTTP流。HTTP长轮询是客户端发起一个请求,服务器端保持连接不关闭,直到有新的消息或者超时才会返回,客户端接收到数据后立即再次发起...
Pushlet和Comet技术是Web服务器向浏览器推送数据的两种策略,主要用于实现实时的、双向的通信。这两种技术在传统的HTTP协议基础上进行了扩展,克服了HTTP请求-响应模型的限制,使得服务器能够主动向客户端推送数据,...
Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器向客户端推送数据的Web应用程序设计模式。Comet技术打破了传统的HTTP请求-响应模型,允许服务器在客户端保持持久连接,从而实现实时数据更新。这在需要...
- **长轮询**:这是Comet技术的一种实现方式,服务器在接收到客户端请求后并不会立即返回,而是会保持连接打开状态,直到有新的数据可用或达到预设的超时时间。这种方式解决了传统的HTTP请求-响应模式中实时性不足的...
主要有两种实现方式:一种是HTTP流(HTTP Streaming),另一种是HTTP分块传输编码(HTTP Chunked Transfer Encoding)。Comet4j框架简化了这两种方式的实现。 2. **Comet4j框架**: Comet4j提供了一套完整的API和...
Comet技术主要有两种实现方式:长轮询和流。在这个项目中,服务器可能采用了长轮询的方式,即客户端发起请求后,服务器保持连接不关闭,直到有新数据可推送给客户端或者超时才返回。这种方式可以有效地减少网络请求...
Comet是一种实现服务器到客户端实时通信的技术,它解决了传统的Ajax轮询带来的效率问题。 【核心知识点】: 1. **Comet技术**: - Comet是一种在Web应用中实现服务器向客户端推送数据的技术,通过长时间的HTTP连接...
这种方式有两种主要实现:长轮询(Long Polling)和HTTP流(HTTP Streaming)。长轮询是客户端发起请求,服务器在没有新数据时保持连接,直到有数据才响应并关闭连接;HTTP流则是服务器在建立连接后不断发送数据,...
它引入了Comet技术,通过长时间保持一个HTTP连接开放,使得服务器能够在一个连接上持续推送数据到客户端,从而极大地提升了实时通信的性能。这种技术尤其适用于聊天应用、股票报价、在线游戏等需要即时更新信息的...
2. **Tomcat 对 Comet 的支持**:Tomcat 自版本 5.5 起就开始支持 Comet,它提供了两种处理模型:`AsyncProcessor` 和 `PushBuilder`。前者基于 Servlet 2.5 的异步处理,后者是针对 Servlet 3.0 引入的,提供更简洁...
Comet 技术主要分为两种实现方式:HTTP 长轮询(Long Polling)和 HTTP 流(HTTP Streaming)。长轮询是客户端发起请求,服务器在没有新数据时保持连接不关闭,直到有新数据或达到预设超时时间才返回响应并关闭连接...
Comet技术主要有两种实现方式:HTTP流(HTTP Streaming)和HTTP分块编码(HTTP Chunked Transfer Encoding)。 1. HTTP流:服务器在响应头中设置"Connection: keep-alive"和"Transfer-Encoding: identity",然后...
主要有两种实现方式: 1. **HTTP流(HTTP Streaming)**:服务器在响应头中设置`Connection: keep-alive`和`Transfer-Encoding: chunked`,然后不断向客户端发送小块数据,客户端收到数据后不关闭连接,等待服务器...