`

关于即时聊天的comet,服务器推的实现策略

阅读更多

HTTP协议是互联网上大量信息交换的基础,其特点是,它是基于请求—响应模式的无状态的单向协议,即必须由客户端发起一个请求建立连接,服务器接收请求,把数据返回给客户端,然后释放连接。下一次,再由客户端发起另一次请求,重复上述过程。服务器始终处于“被动”地位。

 

Comet技术被称为反AJAX(Reverse AJAX)技术,它通过实现服务器推(server push)来解决AJAX需要定时频繁发送请求的问题。通过Comet,客户端所需要的响应信息不再需要主动地去索取,而是在服务器端以事件 (Event)的形式推至客户端。


Comet技术的实现方式有两种:基于 AJAX 的长轮询(long-polling)方式(long-polling)和流方式(streaming)。

 

长轮询:HTTP的连接保持,服务器端会阻塞请求,直到服务器端有一个事件触发或者到达超时。客户端在收到响应后再次发出请求,重新建立连接。通过这种方式,服务器可以在数据可用的任何时候将数据“推”到客户端。因为这种方案基于AJAX,请求异步发出,无须安装插件,IE、Mozilla FireFox都支持。

 

使用 AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于:
- 服务器端会阻塞请求直到有数据传递或超时才返回。

- 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
- 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

 

流方式:在流方式中,服务器推数据返回客户端,但不关闭连接,连接始终保持,直到超时,超时后通知客户端重新建立连接,并关闭原来的连接。

 

在长轮询方式下,客户端是在XMLHttpRequest的readystate为4(即数据传输结束)时调用回调函数,进行信息处理。当 readystate为4时,数据传输结束,连接已经关闭。Mozilla Firefox提供了对流方式的支持,即readystate为3时(数据仍在传输中),客户端可以读取数据,从而无须关闭连接,就能读取处理服务器端返回的信息。IE在readystate为3时,不能读取服务器返回的数据,目前IE不支持流方式。

 

 

 

分享到:
评论

相关推荐

    用DWR comet+Spring实现服务器推送的例子--网页聊天室

    Comet是一种Web编程模式,用于实现服务器向客户端的持久连接,从而实现数据的即时推送。Spring框架是Java领域广泛使用的轻量级应用框架,它可以与DWR结合,帮助开发者更方便地管理服务和组件。 在这个例子中,我们...

    dwr实现的网页即时聊天

    在这个"使用dwr实现的网页即时聊天"项目中,我们将深入探讨如何利用DWR的服务器推技术来创建一个实时的群聊系统。 1. **DWR框架**: DWR简化了JavaScript与Java之间的通信,通过在浏览器端提供动态生成的JavaScript ...

    PHP防Sina微薄无刷新服务器推送(comet)原理

    PHP防Sina微博无刷新服务器推送(Comet)原理是一种技术策略,用于实现在Web应用中实现长轮询或持久连接,使得服务器可以主动向客户端推送数据,而无需客户端频繁发送请求。这种技术在实时性要求较高的场景下,如...

    服务器推技术,最新聊天室技术

    总结来说,服务器推技术是构建聊天室的核心技术,通过WebSocket、SSE等手段实现数据的实时传输,保证用户间的即时交流。同时,聊天室还需要关注用户管理、性能优化、安全性等多个方面,确保稳定、高效的运行。随着...

    comet4j 服务端向浏览器实时推送消息(支持指定用户推送)

    【标题】"comet4j 服务端向浏览器实时推送消息(支持指定用户推送)" 描述了一种技术方案,用于实现在服务器与浏览器之间进行实时通信,特别强调了能够针对性地向特定用户推送消息。这一功能在现代Web应用中非常重要,...

    java-comet

    Comet技术允许服务器向客户端推送数据,而不仅仅是响应客户端的请求,这在构建实时应用如聊天室、股票报价、在线游戏等场景中非常有用。下面将详细介绍Java-Comet以及与其相关的知识点。 一、Java-Comet基础概念 1....

    基于Comet推送技术的实时图形控件

    本篇文章将详细探讨基于Comet推送技术实现的asp.net实时图形控件及其特点。 首先,我们需要理解Comet技术。Comet是一种Web通信模式,它打破了传统的HTTP请求-响应模型,允许服务器向客户端主动推送数据,而不是等待...

    Asp.net Comet(Web)技术

    然而,Comet打破了这一模式,实现了服务器到客户端的双向通信,允许服务器主动推送数据到客户端,无需客户端不断发起新的请求,从而实现了实时性。 Comet技术的核心目标是解决Web应用中的实时性问题,如股票报价、...

    comet4j-tomcat7.jar和comen4j.js

    在Web开发中,这种技术对于实现聊天、实时通知、股票报价等需要即时更新的应用场景非常有用。本讨论将详细讲解Comet4J与Tomcat7的集成以及其核心组件。 1. **Comet4J技术概述**: Comet4J是基于HTTP长连接的技术,...

    PushMessage JavaWeb聊天 推送 实现

    以下是一些关于JavaWeb聊天推送实现的关键知识点: 1. **WebSocket协议**:WebSocket是一种在单个TCP连接上进行全双工通信的协议,是实现双向通信的理想选择。在JavaWeb中,可以使用`javax.websocket` API来创建...

    comet4j_7.jar和comet4j-0.0.2.js

    Comet4j是一个开源的Java库,主要用于实现服务器向客户端的实时推送技术,常用于构建聊天应用和其他需要实时交互的Web服务。这个技术基于HTTP长连接(Comet技术),能够克服传统的HTTP请求-响应模式中延迟高、效率低...

    基于CometByASP.NET全站广播_聊天室代码

    Comet技术是一种处理服务器推送(Server-Sent Events)的策略,它能够使服务器向客户端持续发送数据,而不仅仅是响应客户端的请求,从而实现数据的即时更新。 【描述】"asp.net全站广播 asp.net聊天室"说明这个项目...

    服务器推送功能详细设计.docx

    它的流行与Ajax(异步JavaScript和XML)技术的广泛使用密切相关,Ajax通过局部刷新实现了页面的无刷新交互,而服务器推送则进一步优化了数据传输的即时性。 设计概要: 1. 任务和目标:服务器推送功能的主要任务是...

    comet-jquery

    PHP的灵活性和与MySQL等数据库的良好兼容性,使其成为实现Comet服务器端逻辑的理想选择。 在实际应用中,comet-jquery可能用于实时聊天、股票报价、在线游戏、社交媒体通知等功能。例如,实时聊天系统可以利用Comet...

    comet4j+tomcat6+tomcat7并附完整版Demo

    Comet技术是用于实现实时Web应用的一种方法,它允许服务器主动向客户端推送数据,而不仅仅是响应客户端的请求。 【Comet4j】是Comet技术的一个Java实现框架,旨在简化Java开发者在应用中集成Comet技术的难度。Comet...

    comet4j的jar、js

    - 创建Comet服务器端:使用Comet4j提供的API创建服务器端的Comet处理逻辑。 - 编写客户端代码:在HTML页面中引入"comet4j.js",并通过JavaScript调用对应的API来建立连接,接收服务器推送的数据。 - 配置服务器:...

    3.1.1.Web应用从服务器主动推送Data到客户端有那些方式.doc

    Comet是一种服务器向客户端推送数据的策略,主要分为两种实现方式: - **HTTP长轮询**:与AJAX长轮询类似,但可能结合JSONP技术,通过script标签创建跨域连接。服务器挂起请求直到有事件发生,然后发送响应关闭...

    基于Netty实现CometStreaming方式的聊天室

    综上所述,利用Netty实现CometStreaming方式的聊天室涉及到对HTTP协议的理解、长连接的维持、数据推送策略以及异常处理等多个方面。通过这个过程,我们可以学习到如何构建高效、实时的网络应用,同时也能对Netty的...

    服务器推--DWR中的push机制-Reverse_Ajax.docx

    【服务器推技术与DWR中的push机制】 在Web开发中,传统的Ajax技术主要是基于“拉”(Pull)模型,即浏览器...通过各种模式的灵活组合,开发者可以根据实际应用需求选择合适的服务器推策略,实现高效、实时的双向通信。

    实时聊天系统,无刷新聊天

    在本系统中,采用的是先进的Comet架构,这是一种服务器推送技术,能够实现实时数据传输,确保用户在不刷新页面的情况下接收到最新的聊天内容。 Comet架构的原理是建立一个持久化的HTTP连接,而不是像常规HTTP请求...

Global site tag (gtag.js) - Google Analytics