网页实时更新 | http监听实时变化 | 邮件ajax异步通知| 聊天室原理

我们如果在网页上显示实时性较高的内容,比如证券数据变化,或者新邮件到来时,用户不必刷新浏览器即可弹出收到新邮件的提示。那么服务器如何发送消息通知浏览器呢?其实,网页聊天室就是类似的一个应用。
下面引用一篇文章介绍网页聊天室实现原理,引自小小研究院《[原创] 网页聊天室的原理》

  目前,无论是网页游戏、论坛博客、电子商场,随处都可以看到web聊天室。

web聊天室的实现方法有多种,包括:基于ajax技术的实现,基于Comet(Pushlet)技术的实现,基于XMPP协议的实现,以及基于flash的XmlSocket和远程共享对象的实现。

(1) 基于ajax技术的实现。

ajax(异步JavaScript和XML,Asynchronous javascript and xml),它的作用就是可以实现页面与服务器端的无刷新交互。用ajax来实现web聊天室的基本原理是:在页面上每隔一段时间就通过ajax从服务器中获取数据,然后更新页面显示。这种方法简单明了,缺点是实时性不高。

(2) 基于Comet技术的实现。

Comet 是一种新的 Web 应用架构。基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求较高的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。

Pushlet是一种comet实现(Pushlet 是开源的Comet 框架):在Servlet机制下,数据从服务器的Java对象直接推送(push)到客户端的页面,而无需任何Java applet或者插件的帮助。它使server端可以周期性地更新client的web页面,这与传统的request/response方式不同。

Pushlet基于HTTP流,这种技术常常用在多媒体视频、通讯应用中,比如QuickTime。与装载HTTP页面之后马上关闭HTTP连接的做法相反,Pushlet采用HTTP流方式将新数据源源不断地推送到client,再此期间HTTP连接一直保持打开。有关如何在Java中实现这种Keep-alive的长连接请参看Sun提供的《HTTP Persistent Connection》和W3C的《HTTP1.1规范》。
(3)基于XMPP协议的实现

XMPP(可扩展消息处理现场协议)是基于XML的协议,是专为及时通信系统设计的通信协议,用于即时消息以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。著名的开源聊天系统服务器Openfire就是基于XMPP协议的Jabber服务器。

可以通过Flash或ajax与Jabber服务器进行交互,实现webIM的功能,

(4)基于flash的XmlSocket的实现

Flash Media Server是一个很强大的流媒体服务器,它基于rtmp协议,提供了强壮的流媒体交互功能。在FMS中,提供一种远程共享对象(SharedObject)的机制,客户端可以创建并连接到服务器端的远程共享对象。可以有很多个客户端连接到同一个远程共享对象中,任何一个客户端对共享对象进行了修改,服务器都会将共享对象的修改信息发送给所有其他连接到这个共享对象的客户端。这种远程共享对象的机制可以很方面地实现以下功能:·    远程控制幻灯片放映  ·    文字聊天  ·    网络对战  ·    远程选择和播放歌曲  ·    现场拍卖  ·   客户服务应用程序。

远程共享对象很适合用于实现web聊天室中的群聊功能。为每一个群都建立一个远程共享对象,这样的话,任何用户在群上发信息,就可以通过服务器自动发送到所有的群成员。

用远程共享对象来实现单聊是不实际的。对应单聊的实现,我们需要借助socket。客户端通过socket服务器与其他客户端进行私聊。聊天信息通过socket服务器进行转发。

这种方式是效率最高的web聊天室实现方式。



发表评论

邮箱地址不会被公开。