`

WebIM通信实现

    博客分类:
 
阅读更多

转自:http://blog.csdn.net/Panther105/article/details/4800299

 

关于Web-based IM通信模式的思考

摘要:

本文从Instant Messaging 出发,讨论了Web_based IM信息通信的特殊性,并在此基础上详细分析了现有的实现方案及其各自优缺点。

引言:

Instant Messaging(读成I-M),是一种使人们能在网上识别在线用户并与他们实时交换消息的技术,现主要用于网络即时聊天软件和特殊设备的网络实时监控。该技术普遍采用C/S架构,基于TCP/UDP协议,通过服务器协作,利用防火墙穿透(代理)或基于UDPNAT穿 透技术,保持客户端之间的持续长连接,实现客户端之间信息的实时交互。但是,该类模式下的软件系统要求下载安装专用的客户端程序,导致系统部署成本高昂, 系统维护困难。同时,为保证即时通信的顺利完成,一般还要求客户端防火墙开放特定端口,引起系统安全问题。因此,这种模式的IM技术在网络环境下的广泛使用还存在一些局限性。

Web-based IM,是基于HTTP协议,系统采用B/S模式,客户端通过访问特定的网页而实现的及时通信技术。这种即时通信技术以网页为载体,避免下载安装庞大的客户端程序,系统功能在服务器端统一维护,既减少了系统部署费用,也降低了维护难度。因此,Web-based IM技术将在基于Web的远程监控、网站客服等方面有重大的意义。

然而,Web-based IM在技术实现上存在难以逾越的困难:首先,Web-based IM采用HTTP作为主要的通信协议,因此,HTTP的非连接、无状态特性将导致通信状态管理非常困难;其次,HTTP访问的单向性只允许客户端(Web浏览器)主动去联系服务器,而服务端却无法主动联系特定的客户端,更不用谈多个客户端之间的互访。所以,要实现Web环境下的实时通信,必须首先要解决这个问题,即充分利用HTTP的特性,在技术实现上做出适当的调整,以适应即时通信的需要。本文将在前人的基础上,从客户端“拉”和服务器“推”的角度,总结归纳基于Web的即时通信方案,并进一步分析比较各自的优劣点。

Web IM通信实现方式

1.     客户端“拉”(Client_pull)模式

传统的HTTP请 求模式为:客户端主动向服务器发送信息更新请求,服务器响应请求,客户端接收完响应之后显示更新信息,这也称为客户端“拉”。为实现客户端信息(准)实时 更新,一般采用客户端轮询的方案,即实时信息通过网络发送到服务器,保存到服务器内存甚至服务器实时数据库中,客户端根据实际情况,每隔一定时间就自动向 服务器重新请求页面数据,以保证客户端内容的实时性。然而,传统的做法是客户端页面整体刷新,导致大量无用信息的重复下载,不但浪费客户端、服务器以及网 络资源,而且这种同步的请求方式还将致使客户端页面长时间处于等待响应阶段,而无法继续操作,严重影响客户端体验效果。因此,随着 AJAX技术的成熟,人们常使用XMLHttpRequest对象,采用异步方式访问服务器定时获取更新信息。

2.       服务器“推”(Server-push)模式

服务器“推”模式,即服务器在信息变化之后主动发送新的信息到客户端,客户端接收之后自动进行更新。但是,由于HTTP无状态的特性,服务器响应完毕客户端请求之后,二者之间的通信在默认情况下会自动断开,加上NAT、客户端防火墙等因素的影响,服务器随时向客户端发送更新信息的条件还很不成熟,除非二者之间保持实时的连接。要实现客户端与服务器的实时连接,目前存在以下两种方案值得考虑。

1)基于客户端套接字的服务器推技术

要实现客户端与服务器的实时连接,传统的方式是采用在客户端页面中嵌入ActiveXFlashApplet之类的插件,插件基于TCP/UDP协议,通过套接字方式,实现客户端与服务器的持久连接,保证二者信道的持续通畅,以达到服务器在获取新信息之后可以主动发送到客户端,进行更新。一般而言,在不考虑通信信息的完整性的情况下,为减轻服务器的负载,服务器可以基于UDP协议向客户端发送更新信息。由于UDP是一种不可靠的协议,所以如果需要考虑通信信息的一致性等,则必须使用具有信息完整性验证的TCP协议进行通信。

2)Comet技术

近年来,由于Ajax技术的发展和推广,一种基于HTTP长连接、无需在浏览器端下载安装插件服务器“推”技术,即Comet技术,成为新宠。其实现模型有以下两种:基于 AJAX 的长轮询(long-polling)方式和基于 Iframe htmlfile 的流(streaming)方式。

长轮询的基本思想就是服务器不立即响应客户端请求,直到服务器接收到针对该客户端的新的信息的时候才响应客户端的请求。客户端一收到服务器的响应就马上发送下一个请求,这样就保证了客户端总是处于请求等待响应的状态,从而使得服务器处于“主动”的地位,当其有数据要发送时可以准确无误地找到客户端,这就类似于一个持久的TCP连接,如图所示

 

 

如 果在双方规定的时间内,在两个方向上都没有反应(如客户端没有需要更新的信息,而连接即将超时的情况),则服务器可以用一个没有数据的空响应来进行响应。 这个响应将立即触发一个新的客户端请求,这样就可以保证在网络连接不正常的情况下双方都可以在一个合理的时间内知道。为了避免传统HTTP请求导致页面整体刷新的情况,客户端请求一般采用AJAX技术,利用XMLHttpRequest对象向服务器发送异步请求以更新数据。

流(streaming)方式的基本思想是: HTML 页面里嵌入一个隐蔵帧,然后将这个隐藏帧的 SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。然而,iframe服务器端并不返回直接显示在页面的数据,而是返回对客户端 Javascript 函数的调用,如“<script type="text/javascript">js_func(“data from server ”)</script>”。服务器端将返回的数据作为客户端 JavaScript 函数的参数传递;客户端浏览器的 Javascript 引擎在收到服务器返回的 JavaScript 调用时就会去执行代码。

 

从上图可以看到,每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建时关闭(一些防火墙常被设置为丢弃过长的连接,服务器端可以设置一个超时时间,超时后通知客户端重新建立连接,并关闭原来的连接)。

实现方式比较

采用纯粹的HTTP+AJAX技 术实现网页的实时通信,技术简单,成本低,但是存在一些不足:第一,所有客户端的更新消息通过服务器进行“被动”地中转,客户端通过对服务器进行轮询,实 现客户与客户之间的消息交互,因此客户端获取的信息是“伪实时”的。第二,轮询的时间间隔的设定异常困难:如果时间间隔过短,就会产生大量的无用请求,加 重网络的负担;如果时间间隔过长,又不能保证客户端及时获取更新信息。由此可见,该方案的成功实现必须解决低响应等待时间和低网络带宽之间的矛盾问题。倘 若服务器仅在数据发生变化之后,才向客户端发送更新信息,那么这一切问题都能得到妥善处理。

Comet技术可以解决低响应等待时间和低网络带宽之间的矛盾问题,并且在信息实时性方面有所改善,但是仍然存在一些问题需要注意:首先,该模式会仍然导致部分无用信息的下载;其次,对于某些对信息实时性要求很高的应用,它也表现出心有余而力不足;再者,基于HTTP1.1规范,同一客户端不能同时使用超过2个的HTTP长连接;最后,由于Web 服务器会为每个连接创建一个线程,如果在大型的商业应用中使用 Comet,服务器端需要维护大量并发的长连接,因此在这种应用背景下,服务器端需要考虑负载均衡和集群技术,或是在服务器端为长连接作一些改进。

基于插件的解决方案利用Socket连接服务器的确可以保证客户端信息的实时更新,但一些因素值得考虑:首先,部分页面插件需要客户端下载安装(如ActiveX),因此在特定客户端环境下可能因为插件安装失败而导致实时通信无法使用;其次,页面插件使用套接字接口,需要服务器开放一个通信端口,在实现过程中甚至可能需要程序员解决防火墙穿透问题;再次,页面插件在接收到服务器返回的信息之后,可能无法通过脚本语言(如JavaScript)去更新HTML页面(如Applet);最后,客户端连接数量增多会加重网络负担和服务器负载,直接影响客户端并发访问数量。

展望:

以 上几种解决方案虽然都存在一定的不足,但在特定的情况下却具有一定的优势。因此,在实际的工作中,可以针对特定网络状况、服务器性能、信息有效期限等现实 情况从有效信息率(单位时间系统内产生的有效信息的数量)、客户端并发数量、数据一致性、信息实时性、服务器负载等方面考察各种方案。

 

参考文献:

1.       Comet:基于 HTTP 长连接的服务器推技术

2.       B_S模式下基于JabberIM系统的构建方法

3.       IM:聊天进化谱

4.       基于Ajax的即时消息系统的设计与实现

5.       基于P2P技术实现即时通信系统的研究

6.       基于Web的远程实时监控系统研究及应用

7.       即时通信研究综述

8.       即时消息

9.       网页即时通信的研究及应用

10.   Ajax技术在基于Web的实时监控系统中的应用研究

11.   Ajax技术在实时WEB监测中的应用研究

12.   Flash在基于Web的远程实时监控系统中的应用研究

13.   动态Web技术在实时监测系统中的实现

14.   基于B_S的海洋平台远程监控系统设计

15.   基于Web的告警实时显示系统的设计与实现

16.   基于Web的工业信息实时监控系统研究

17.   基于WEB的工业远程监控系统研究与实现

18.   基于Web的实时控制系统的研究与设计

19.   基于服务器推送和事件流处理技术的实时Web系统研究

20.   Anil Bhatt 张凯峰(译)Ajax推送与拉取方式的比较

21.   JerryQu WebIM开发之通讯模式介绍

22.   赵宏华  基于WEBIM实现考虑

23.   及时通讯原理

24.   WebIM开发之多页面数据同步

分享到:
评论

相关推荐

    实现webim得用ajax

    总的来说,实现WebIM的关键在于使用Ajax实现与服务器的实时通信,配合WebSocket或Ajax轮询技术解决实时性问题,同时采用JSON进行数据交换,结合服务器端的处理逻辑,确保系统的稳定、安全和高效。在实际开发过程中,...

    webim,即时通信软件,php

    WebIM是一款基于PHP和MySQL开发的即时通信软件,专门用于实现网页端的实时通信功能。在互联网应用中,即时通信已经成为提升用户体验、增强互动性的重要工具,尤其在社交平台、在线客服、协作工具等领域有着广泛的...

    webim

    WebIM,全称为Web即时通讯,是一种基于Web技术实现的在线聊天系统,它允许用户在浏览器中进行实时的文本、语音甚至视频通信,无需安装额外的客户端软件。WebIM的核心是利用WebSocket等现代网络通信协议,提供低延迟...

    WEBIM网站开发用途

    "WEBIM"(Web即时通讯)技术就是实现这种实时通信的关键工具。本文将深入探讨WEBIM在网站开发中的用途,以及如何利用Sample.Client.rar这个压缩包资源进行实践。 **WEBIM的定义与工作原理** WEBIM,全称为Web ...

    openfire+smack开发webim笔记

    【标题】:“openfire+smack开发webim笔记”涉及的知识点详解 【一】XMPP(可扩展消息处理...WebIM的实现方式多样化,包括Ajax、Pushlet、Comet等技术,而知名厂商的成功案例则为开发者提供了丰富的实践经验和参考。

    WebQQ WebIM WebSocket

    【描述】在现代互联网技术中,WebQQ WebIM WebSocket是一种实现即时通讯(Instant Messaging,IM)的方式,它利用WebSocket协议来实现在Web端进行实时双向通信。WebSocket协议是HTML5的一个重要特性,旨在提供低延迟...

    WEBIM之Continuation方式实现

    【标题】"WEBIM之Continuation方式实现"主要探讨的是在网络通信中,特别是Web即时通讯(WebIM)场景下,如何利用Continuation技术优化数据传输和处理的方式。Continuation是一种编程模式,它允许将一个操作分阶段...

    webim-for-thinkphp

    WebIM(Web即时通讯)是一种在网页上实现即时通信功能的技术,常用于在线客服、社交应用等场景。它允许用户无需安装额外软件即可在浏览器中进行实时对话。本项目是WebIM的ThinkPHP集成版本,专为商城建站和企业网站...

    免费下载WEBIM java pushlet .net php

    【标题】"免费下载WEBIM java pushlet .net php" 涉及的技术和知识点主要围绕着实时通信(Real-time Communication, RTC)领域,尤其是Web即时通讯(Web Instant Messaging, WebIM)的实现,以及涉及到的编程语言和...

    webim(web即时通)学习文档

    WebIM(Web即时通讯)是一种基于网页的实时通信技术,它允许用户在浏览器上实现即时消息的发送和接收,无需安装额外的客户端软件。WebIM技术通常基于WebSocket、Long Polling、Server-Sent Events等现代浏览器支持的...

    在线聊天WEBIM.rar

    WebIM,全称为Web即时通讯,是指通过Web浏览器实现的即时通讯功能,它允许用户无需安装额外软件即可进行实时交流。这个“在线聊天WEBIM.rar”压缩包很可能包含了构建一个WebIM系统的相关资源和代码。 在WebIM系统中...

    webim-for-flask-master

    【标题】"webim-for-flask-master"是一个基于Flask框架构建的实时通讯系统项目,主要专注于实现Web即时通讯(WebIM)功能。这个项目利用Python的Flask库,为Web应用提供了一个轻量级、高效的实时通信解决方案。 ...

    WebOS试探+WebIM简单演示

    WebIM的实现通常基于WebSocket技术,这是一种双向通信协议,允许服务器和客户端实时交换数据,提高了即时通讯的效率。在Flex_WebIM_1.0_CatWindows_2.0_20110809.zip.001这个压缩包中,包含了一个基于Adobe Flex的...

    WebIM 即时通讯 网页聊天

    WebIM的核心是利用WebSocket协议,这是一种在浏览器与服务器之间建立长连接的协议,可以实现双向通信,解决了传统HTTP协议的请求-响应模式中的实时性问题。 在"WebIM 即时通讯 网页聊天"这个项目中,C#源码被用于...

    WEBIM是为UCenter Home专门开发的WEB即时通信系

    WEBIM是为UCenter Home专门开发的WEB即时通信系统,可以让UC Home拥有搜狐小纸条、校内网、Facebook一样WEBIM。 webim插件 for UCHOME 新版功能特点 WEBIM与搜狐小纸条、校内通、Facebook IM的功能类似,实现UC ...

    基于HTML5语言技术的WebIM组件前端设计与实现.pdf

    即时通信功能的实现流程为:用户打开浏览器并进入某个网站后,在后台同时运行通讯模块。通讯模块向服务器发送请求,获取好友列表并在浏览器右侧显示。当用户需要与好友进行即时通讯,可以从好友列表中选定对象,在弹...

    环信WebIM超精简示例

    环信WebIM基于XMPP协议(Extensible Messaging and Presence Protocol),它支持文本、语音、视频等多种通信方式,并且提供群聊、推送通知、离线消息等高级功能。在JavaScript开发中,我们通常会使用环信提供的JS ...

    webim应用仿的macqq界面

    3. **WebSocket通信**:实现即时通讯的关键技术,提供双向通信,确保消息的实时传输。 4. **axios或fetch API**:用于与服务器交换数据,如登录验证、获取联系人列表等。 5. **CSS预处理器(如Sass/LESS)**:提升...

Global site tag (gtag.js) - Google Analytics