Web IM的特性:无需安装客户端,穿透防火墙,与社区的紧密结合
Web IM的应用:社区用户的交流,在线客服,CRM。
Web IM实现技术
Web IM的实现技术主要有:
基于插件的技术:如ActiveX,插件相对稳定,但插件需要用户自己允许并下载安装,而大多数用户担心安装了黑客软件或插件对计算机系统不好而不愿意安装,并且上网助手等软件也拦截插件,导致很多用户无法使用。另外,ActiveX受平台限制,只能在IE下使用。
基于Flash的技术:典型的如Yahoo web messenger,结合Flash和Ajax;Google Talk Gadget
纯粹的基于HTTP的技术:
前端使用Ajax的Web IM:meebo, ebuddy, ILoveIm, MSN Web Messenger, KoolIM等。
后台使用comet的Web IM:meebo, gtalk等。
支持wap的有ebuddy, Yahoo Web Messenger, MSN Web Messenger, Google Talk, Mabber, AIM Express (Web Messengers Handbook)
Web IM
1. 国内有独立IM的Web版:Web Popo, WebQQ, 也有与论坛等结合的IM:sohu小纸条,新浪“纸条箱”,QQ空间“小纸条”,淘宝旺旺等,
2. 国外:基于上都是独立IM的Web版。或者集成多种IM的Web版,如meebo, flcikim, ebuddy等。
相关技术
Comet (Server-Push)
Comet技术的一个重要组成部分就是event-drived web server,目前商用的实现已经出现,如lightstreamer,Lightstreamer Dojo Demo:http://app.lightstreamer.com/DojoDemo/
几个开源的支持Comet的Library。
Orbited :一种开源的分布式Comet服务器
AjaxMessaging :Ruby on Rails的Comet插件
Pushlets :一个开源框架,可以让服务器端java对象推送事件到浏览器端javascript,java applet,或者flash应用程序
Lightstreamer :提供基于AJAX-COMET模式的HTTP流的商业实现
Pjax :Ajax的推送技术
Scalability(可伸缩性,可扩展性)
Because Comet applications send events in real time, they typically use more resources than other types of web applications, making them more difficult to scale (grow to support large numbers of users).
Comet relies on continually keeping at least one server–client connection open for each client. Traditional web servers, designed for the page-by-page application architecture, cannot cope with such large numbers of open connections. This is a vertical scalability problem: it is difficult to handle many users on each server.
Additionally, because Comet applications are often interactive, allowing arbitrary groups of users to communicate with each-other, splitting tasks among servers is more difficult than for applications in which each user acts independently. This is a horizontal scalability problem: it is difficult to add more servers to the application.
Comet在可伸缩性上的提升:
http://cometdaily.com/2008/01/07/20000-reasons-that-comet-scales/
性能:After some recent optimizations, the Dojo Cometd implementation of the Bayeux protocol running on the Jetty web server can now handle up to 20,000 simultaneous users per server while maintaining sub-second latency.
测试环境:mid-sized Amazon EC2 virtual servers: 7.5 GB of memory, 2×2 EC2 Compute Units, 64-bit platform running Ubuntu 7.10 and Sun JVM 1.5.0_13. A single virtual machine was used as the Cometd server and between 1 and 3 virtual machines were used to generate the load of 20,000 clients.
DWR
DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码)。
可以使用DWR实现Comet Web应用程序,当前支持Comet的容器有Grizzly 、Tomcat 和Jetty等,其中,Jetty是做Ajax+Java开发的首选服务器端开发平台。
面向 Java 开发人员的 Ajax: 使用 Jetty 和 Direct Web Remoting 编写可扩展的 Comet 应用程序:http://www.ibm.com/developerworks/cn/java/j-jettydwr/index.html
Ajax推送与拉取方式的比较:http://www.infoq.com/cn/news/2007/07/pushvspull
实现基于web的实时事件通知的方法:
Dojo
Dojo的Comet库,dojo.io.bind()
DWR has joined the Dojo Foundation, AJAX Frameworks: Mixing Dojo & DWR
几个典型的Web IM 分析
国内与论坛结合的众多Web IM中,sohu的小纸条是比较有特色和代表性的。
Sohu 小纸条
搜狐小纸条是基于Web的即时通讯工具。基于搜狐统一登录系统(Passport),它被搜狐几乎所有重要产品(包括搜狐博客、搜狐社区、ChinaRen等)运用到各自的好友系统中去。成为多数搜狐用户交流沟通的重要工具。借助用户的既存关系,搜狐小纸条的沟通交流显得更加安全,粘性更高。搜狐小纸条将作为搜狐主线产品的联络工具,它不再只是交流沟通的工具,还将成为一个资源共享、信息传递、关系传递等多元化,全方位的产品。
sohu论坛在线人数:69264(中午11:49),88688(下午3点),
http://luxuelin.blog.sohu.com/63653813.html
http://xiaonei.chinaren.com/blog/zoud
http://messenger.blog.sohu.com/
http://sohume.q.sohu.com/topics
ChinaRen/SOHU 小纸条系统核心 核心为3个小server系统:online2(在线系统业务逻辑),userv(用户资料系统),cserv(LRU缓存) 这三个子系统都是UDP+线程池结构,单进程+多线程。配备java接口,apache_mod的json和xml接口。 online2包括了大部分业务逻辑,包括,上线,好友系统,纸条系统。 userv包括设置用户各种属性,信息。 cserv是个大的lru缓存,用于减小磁盘IO。可以放各种信息块,包括用户信息,好友,留言等。目前配备4台服务器(DL380,xeon:3G*2,SCSI:146G raid,Ram:2G),用户分布到4台服务器上,相互交互。服务器可以由1台到2台,到4台,到8台。底层存储为文件存储(无数据库),用reiserfs。 配套系统: mod_online,两个版本,apache和lighttpd版本,用于页面上显示蜡烛人。请求量巨大,目前用lighttpd版本的 mod_online。放在sohu的squid前端机器上,运行在8080,大概8台,每台请求量大概500-800个每秒。蜡烛人在所有ChinaRen页面有ID的地方显示用户是否在线。 目前这套在线系统,作为SOHUIM的内核原型。准备开发WEBIM系统,用户所有SOHU矩阵用户的联络。
(引自:http://luxuelin.blog.sohu.com/63653813.html)
Sohu 小纸条目前共有8台服务器(2006年的数据)
问题:由于没有采用Ajax,聊天延迟非常大,网上有反映:“非常的费资源,聊着聊着,网页越来越慢,而且输入法也会因为资源的占用而发生一些不好的表现”;对Firefox技术不好;
http://images.sohu.com/cs/sohuim/xiaozt/version/2.0/js/webim.1.3.7.js
对比新浪的“纸条箱”
与搜狐小纸条相比,新浪的“纸条箱”还不是IM,只是有好友,发纸条功能,但是不能即时聊天,没有IM窗口,不能看用户的状态,而且一个非常不好的功能就是:每次发纸条都要输入验证码。
新浪“纸条箱”的附加功能:对好友进行了自动分类,如博客好友,论坛好友等。
Meebo
http://blog.meebo.com/?p=129
支持特性:文件传输,Meebo Rooms,
前端Ajax,后端Comet,http server为lightTPD
Meebo的Load Balancing:http://blog.meebo.com/?p=127
服务器端用fastCGI实现(C/C++),
http://blog.meebo.com/?p=23
Meebo的三层:client-side (JavaScript), the communication layer, and then Gaim,
Ajax的使用:Use modified versions of the prototype.js $ function and dojo.require,通过使用Ajax,meebo可以做到无刷新的显示新的内容。使用Ajax有两种方式,一是每隔3~4秒轮询,发信息给服务器询问是否有更新,但是这个延迟也很大,Meebo使用Comet (long-polling)技术,
Meebo的通信方式:为了有更快响应,Simulate event-driven communication between the client and the communication layer. The client pings our servers occasionally to tell the server that the IM session (browser window) is still open. If there are any messages that the client or server needs to communicate, those messages are sent immediately. When there are no events, the communication layer sleeps until it sees a new event that needs to be handled. By doing so, we don’t hammer the servers and minimize the amount of network traffic.
当用户启动一个IM Session,meebo就创建一个与AOL, Jabber, MSN, and Yahoo’s等新的连接(通过开源的GAIM库),moobo的作者(Sandy)对GAIM进行了优化,这样,在每台服务器上可以运行很多GAIM实例,
文件传输:使用Amazon S3/EC2中转,http://blog.meebo.com/?p=355
meebo me:allows users to embed a version of Meebo on their personal website
On October 29, 2007, Meebo announced the abilitly to use applications of Video Conferencing(from MeBeam), Voice Chat(from Pudding Media), Video/Audio Call(from TokBox), Group Voice Call(from TalkShoe), Live Broadcast(from Ustream.tv), and you can create your own applications to play games or anything you'd like.
Google Talk on the web (Google Talk Gadget)
Google Talk Gadget:Flash实现,可以把Google Talk嵌入到各种网页里去。
开源的Web IM
IM 客户端软件最重要的有Pidgin和Miranda,它们实现了流行IM软件的各种协议。
JWChat:一个基于web的Jabber客户端。
IM协议
http://www.answers.com/topic/comparison-of-instant-messaging-protocols
用web2.0朏务(三) - 在线IM篇
由. Riku 将文章归档于 评论
如果你是Gmail用户,并且使用过Gmail内置的Gtalk客户端,那么你应该对在线版的IM软件有所了解,并且有可能你会鏞常喜欢它,下鏢介经几款在线IM软件,供叄住参考。
1』Meebo–支挏AIM』ICQ』Yahoo! Messenger』Jabber』Gtalk和MSN多秏IM平台。描供中文界鏢,速度较快。注册収可以双时添加多个丏双类型的IM帏户,支挏IE和FireFox。另外,如果你使用的是Flock的诏,通过一个插件可以让Meebo与Flock相结又(觏这里),使用更加方便。
2』Mabber–描供的IM平台与Meebo差丏多,双样都支挏AIM』ICQ』Yahoo! Messenger』Jabber』Gtalk和MSN等。Mabber目剏还没有中文界鏢,而且速度也比较慢,它必须注册一个帏号収扏能使用,丏像Meebo那样在剏台描供独立的IM登录口。双样支挏IE和FireFox,目剏还处于Beta阶段。
3』Ebuddy–目剏只描供MSN』Yahoo和AIM三秏IM平台,而且它无需注册,直接在剏台描供每个IM的登录口,它的特色在于描供了与IM软件相类似的使用界鏢,擏作方便』支挏IE和FireFox。另外一个特色在于,它还描供WAP登录界鏢』也就是说可以通手机揥登录到IM平台,这样无论走到哪都能与网友进行沟通。
4』AIM Express–这是AIM描供的独立在线客户端,也就是说它只支挏AIM的右时通软件。
5』MSN Web Messenger–与AIM Express相类似,由微软描供的一款MSN独立在线客户端。
6』ICQ2GO–ICQ公司描供的ICQ独立在线客户端,使用JAVA技术。
7』JWChat–一个基于web的Jabber客户端。它其实是一个开溏软件,你可以下载収在自已的朏务器上安装,描供在线IM应用朏务,当然它也描供了一个在线DEMO,你可以试用它的功能。
8』KoolIM–最新发现的一个,与Meebo类似,描供AIM』ICQ』Yahoo! Messenger』Jabber』Gtalk和MSN多秏IM平台,并且在剏台就可以多帏号双时登录。你也可以注册一个帏号収把多个IM帏号集戏在一起。支挏IE和Firefox。(via Web2.0Fan.net)
9』Imhaha–也是与Meebo鏞常相似的一个在线IM朏务,丏过关键在于它支挏QQ,详细介经觏PARK17的QQ也web-based。
10』RadiusIM–又是一个与Meebo相类似的基于web的IM客户端,它支挏AIM』Yahoo messager!』MSN和Gtalk四秏IM,使用Ajax技术构建。
总的揥说,对于我们常用的一些IM软件,Meebo』Mabber或Ebuddy这三款就足以胜任,而在这三款当中,个人认为Meebo相对而言比较出色一点,丏仅功能比较齏全,而且速度也较快,所以我个人推菏Meebo。
Zimbra拟明年增加Web邮箱IM功能http://tech.QQ.com 2006年11月20日14:41 CNET (0)
开源软件商Zimbra拟明年增加Web邮箱IM功能
· 免费用QQ打电话超清晰
· 银行卡 安全快捷换Q币
· 沟通无极限手机Q时代
· 魔法表情秀出百变心情
· 管中窥豹 明察秋毫
· QQ秀 秀出个性真自我
CNET科技资讯网11月18日国际报道 开放源代码软件商Zimbra计划在明年整合即时通信功能与其Web邮箱和日程管理软件。
该公司还准备在12月推出一项“离线用户端软件”,让使用者在离线状态使用其网络软件。
Zimbra采用AJAX开发技术,因此使用者享有较大的互动性,例如可用拖曳方式编辑日程管理。
Zimbra还提供若干"Zimlets",可链接其他应用软件。如Google Maps mashup(混搭程序)可在鼠标移至某个地址时显示其位置。
Zimbra共同创始人兼首席执行官Satish Dharmaraj表示,明年公司的焦点是通过整合即时通信拓展市场,此外也会进一步开发其离线客端软件。
第一版的离线客端软件订于今年底推出,将使用区域数据库存储e-mail和日程管理信息,并在使用者重新连线时,与Zimbrae-mail服务器同步更新。
Dharmaraj表示,Zimbra有意通过支持POP协定,或由不同的e-mail帐号转寄e-mail等服务,扩张其软件功能,让该公司的产品与其他e-mail服务互通。
Zimbra号称目前拥有450万用户,其中大部分来自网络服务商(ISP)向其顾客的推销。该公司的开放源代码版服务器软件可免费下载,较高端的版本则为专有软件。
Dharmaraj表示,Zimbra也发现教育市场对网络客端软件和先进的计划排程等功能特别感兴趣。大学和ISP等客户也可改变其软件的外观设计,以搭配自己的品牌风格。
Dharmaraj说:“我们认为(网络)应用软件比桌面应用软件更丰富。仅管仍有少许限制,但其丰富的内容和随时随地访问的优势,远超过那些限制。”
Web IM,类QQ和MSN,Web(非GUI)实现,支持集群。
要点
1.采用长连接,及时响应消息;
使用Tomcat6的Comet特性
注:Read事件在POST数据情况下发生,GET方式不会产生Read事件。
2.消息机制
参与对象:
用户:User
群:Group
参与者:Peer(群成员)
服务端:
集群主机(A类) 1...n主机(B类)
A----Database
A、B之间通过http/tcp...协议通讯
职责:
A类主机负责数据存取以及产生消息事件;
B类主机传递消息,并根据消息更新自身状态(集群主机同步);
B类主机状态包含:Logined User/Active Group/Group Peer
客户端:
客户端保持对服务器的长连接(setTimeout,确保只有一个连接);
连接返回信息(消息)再分派:系统消息、Group消息...
消息传递:
Client---监听消息(长连接);
B类主机为长连接添加事件监听;
B类主机监听A类主机事件;
Client--->发送请求(普通请求,短连接)--->B类主机接收,转至---->A类主机;
A类主机根据请求处理DB,并fireEvent...--->B类主机接收,B类主机根据Event信息,更新Group/User/Peer信息,并转发给Group/User--->
1)Group接收,遍历Peer,发送给Peer对应的在线User
2)User接收,长连接监听,写消息并close event.(客户端在连接关闭后将再次请求长连接)
3.同账号多次/多处登录限制方法:UserLoginEvent中带B类主机ID,
1)该用户在别的主机已登录:主机检测本机用户--断线处理。
2)本主机重复登录:检查已登录User,把之前登录用户断线。
4.Tomcat6配置:
server.xml,修改为NIO Connector:
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" ...URIEncoding="UTF-8"/>
URIEncoding为URI设置编码(对GET方式生效),POST方式情况增加EncodeFileter。
5.客户端请求:采用Ajax请求,避免页面刷新。
会打开一个网页,你若还没Gmail帐号就点击下面的“Create an account now ”若有Gmail帐号就点
击上面的“Sign In ”输入用户名和密码即可
7、目前还没有发现UC的Web版
目前web网页版的即时聊天层出不穷,下面是几款web版整合(QQ、msn、icq、yahoo通、Gtalk等)即时聊天工具,请大家根据自己的爱好择优选之。
像imhaha这样先入为主的大亨,它是第一个推出了网页版的qq 对国内朋友来说是个不小的福音,还有比较出名的像meboo等等
1.www.imtata.com 主要集成了qq和msn两种聊天软件,看来主要针对的是国内市场,和web msn相比除了基本的聊天功能以外,还添加了文件传输,视频和音频等功能,网站宣传上说到可以完成MSN和QQ的群聊(我没有找到相应的按键),色彩上选择了淡雅的色系,没有给人以很强的视觉冲击力,外形比较像外国一个老牌web im集成网站meebo,但是meebo没有集成qq,所以对中国市场应该影响不大。就产品使用体验而言现在imtata还存在很多和其他web版im一样的问题,无法显示全部的好友,容易漏话,反映速度不如客户端等,但这个产品的出现还是以傲人的姿态给正在埋头苦干的腾讯一个下马威。
web2.0时代到来之后,网站建设似乎显得更加焦急,没有仔细思考就以迅雷不及掩耳之势轰轰烈烈的呈现在网友面前,这其中更不乏很多网站都是来也匆匆,去也匆匆,没有经得起2.0浪潮的洗礼,这次还要让我们拭目以待,看看imtata网站能否走的更远。把以前知道基于web的即时聊天站点做了一个小小的整理
2、imhaha
http://www.imhaha.com
最近最热的要属IMhaha,并不是因为IMhaha 功能上有什么重大的突破 而在于IMhaha支持国内的QQ!IMhaha 是一家"硅谷一家就叫Imhaha的公司"创办的,布局方面和 meebo 很类似,最大的优越就是支持QQ!其他的倒没什么。喜欢 QQ 的朋友可以去试试看。
3、meebo
http://www.meebo.com/
meebo.com是一种和eMessenger一样的基于Web的多协议IM,目前可以同时支持GTalk、MSN、AOL or ICQ、Yahoo!这五个即时通讯服务。和MYIM、Gaim、Trillian等集成式即时通信软件一样,提供了文字信息的聊天交流,但它不能语音视频,不能群聊,没有Email提醒。不同的是,meebo.com使用了AJAX,不用在客户端进行软件安装,登录meebo.com即可使用,提供完全的Windows客户端用户体验。偶尔需要在没有安装GTalk、MSN、AOL or ICQ、Yahoo!的计算机上使用,还是很值得推荐的。
4、Ebuddy
http://www.ebuddy.com/
Ebuddy又一家WEB集成式IM工具,它还同时支持移动IM交流。目前Ebuddy支持MSN、YAHOO、AIM等国外主流IM工具。虽然前面介绍的Meebo也提供类似服务,不过Ebuddy更突出的是它支持MOBILE移动终端,在目前颇为热门的移动应用领域,Ebuddy走在了前面。
5、Kool IM
http://www.koolim.com/
Koolim是另一个在线即时通讯服务器。基本上与前面两个介绍的没有什么差别,只是由于是新服务,所以速度尚可,目前支持 AIM、MSN、Y! IM、Gtalk、ICQ 和 Jabber 等主流 IM 通讯协议。
6、i love im
http://www.iloveim.com/
这个就没什么好介绍的,基本上跟前面的一样,目前只支持 MSN、Y! IM、AOL
7、Goowy
http://www.goowy.com/
goowy本身并不是web聊天工具,goowy是一款基于Web的桌面系统(类WebOS的Desktop),不过里面内置了MSN、Y! IM、AOL等im,纯flash的操作界面,用着很舒服
二. 技术资料
1. web msn的开发资料
■MSN协议
英文:
http://www.hypothetic.org/docs/msn/general/overview.php
中文:
http://blog.csdn.net/fanccYang/category/106184.aspx
■TJMSN
网址:http://tjmsn.tomjudge.com
简介:
TjMSN was started as due to a lack of decent MSN Messenger clients for Linux, so I decided that I would write a client that was platform independent, so that I would run on both my desktop and laptop.
TjMSN is licensed under the terms of the GNU General Public License.
就是一个平台无关的msn客户端
使用情况:
可正常运行,不过对于中文支持较差。在发送中文消息后,就出现发送其他消息失败的情况。
■TjMSNLib
网址:http://tjmsn.tomjudge.com
简介:
About TjMSNLib
TjMSNLib was was split from the original TjMSN development tree to aid in the seperation of the Networking Code from the GUI to a) simplify the GUI code, b) to remove large repeated code chunks, c) to make it easyer to manage the networking as it is now all in a single package rather than spread accross the GUI classes.
TjMSNLib is licensed under the terms of the GNU General Public License
就是一个MSN协议的Java实现的包,提供了3个小例子,一个简单的客户端,一个只会回复“OK”的msn机器人,另一个也是一个msn机器人,可以在用户改变状态时发送“hey”给改用户。
客户端,还有第一个msn机器人已经好用。
本包提供了docapi文档:&<60;&<60; &<60;http://tjmsn.tomjudge.com/docs/lib/
利用以上可以实现web msn
文档地址:
http://tjmsn.tomjudge.com/developers/tjmsnlib.php
■libmsn
网址:http://libmsn.bdash.net.nz/
简介:
libmsn is a C++ library for Microsoft's MSN Messenger service. It provides a high-level interface that allows an application to access instant messaging features with ease.
The libmsn 3 series is a complete refactoring of Meredydd Luff's original libmsn, which is used by several popular instant messaging clients, including Fire, Everybuddy Lite, and attym. The result of the refactoring is that the library is more object-oriented, consistent and maintainable. This has made it possible to simplify the code, add new features, and squash a number of existing bugs.
■MSN Client
简介:http://www.sourceshock.com/details_snippet/37/
用php实现的msn 客户端。使用msn的MSNP8通讯。
没有用起来。
■Blobsy
网址:http://www.blobsy.org/
简介:
Blobsy is an Open Source MSN Messenger bot, designed for easy setup, flexibility and ease of use. It is highly customizable and adding more functionality is extremely easy. It is freely distributable under the GNU General Public License (GPL).
没有用起来。
■JMSN
简介:和TJMSN类似
http://jmsn.sourceforge.net/
■msnmlib
简介:和TjMSNLib类似
不过都是韩文,看不懂
DOCAPI地址:
http://jmsn.sourceforge.net/msnmlib/docs/index.html
■PHP MSN Messenger Class
http://flumpcakes.co.uk/php/msn-messenger
简介:
This is a simple to use class file which can be used to connect to the MSN Messenger Network. For the SSL authentication the php_curl modules can be used, or a curl executable (binary).
Currently the MSN9 Protocol is supported, and IM messages can be sent and received.
- Script updated to fix auth failures -
http://www.meebo.com/
已经见过不少了,例如ebay.com.cn得客服。还有一些公司在线客服
b/s版有个很大得优势,就是不要另外安装软件
公司产品中也有这一块功能,正如楼主所说,用得是Ajax技术
客户用得不多,算是个噱头而已。
# re: 基于Web的IM实现思考 回复
2006-05-09 20:12 by 补丁
不是很清楚怎么实现的,但是gmail里的googletalk似乎是实时的...有谁知道的可否告知一下
很久以前装过个googletalk,似乎是c/s的?
如今绝大多数IM软件都是基于桌面的,通常使用Tcp/Udp,并且都实现了防火墙穿透(代理)和基于Udp的NAT穿透的P2P技术。创建一个基于Web的IM是否可行(我们这里不考虑在浏览器中嵌入类似ActiveX控件的伪B/S,因为它实际上还是一个C/S,我们要讨论的是纯的Web方式)?答案无疑是肯定的,但是有些限制,这是因为:
(1)基于Web的IM不可避免的采用Http作为主要的通信协议,而Htpp的非连接、无状态特性使得状态管理比较困难。当然,使用Http的好处是能轻易的穿过防火墙。(大多数网关都默认开放http的80端口)
(2)单向性。只有客户端(Web浏览器)主动去联系服务器,而服务端无法主动联系特定的客户。
这些Web特性将会导致哪些限制了?
(1)客户与客户之间无法实现直接的P2P。因为基于Web时,一个客户无法直接“找到”另一个客户,就更别提NAT穿透了。
(2)客户与客户之间的消息交互是“伪实时”的,所有的消息都必须通过服务器进行“被动”地中转。比如,当客户A要把某个聊天消息Msg发送给B时,它首先将msg提交给服务器,因为服务器无法主动找到B,所以服务器需要暂存这个Msg(比如放入数据库),等到B来请求时,才能将这个Msg转发。这就是“被动”的含义了。
即使有这么多限制,我们仍然可以实现一个像模像样的基于Web的IM,这只是需要一些简单的技术/技巧。
(1)客户端使用Ajax技术实现页面局部刷新。如果每当有新消息来临或状态通知来临时,都需要整个页面刷新,这个Web IM一定不及格。
(2)客户端使用定时器不断的询问服务器是否有新的通知。比如是否有别人发给我的Msg、某个好友的状态是否发生的变化等,如果有,则向服务器提取这些信息。
(3)文件传输功能,仍然可以实现,同文字聊天消息一样。发送方先将文件上载到服务器,接收方通过轮询发现有传送给自己的文件时,则下载文件。
(4)视频聊天功能,仍然可以实现。首先是视频的捕捉、编码、解码,这可能需要在浏览器中嵌入类似ActiveX的控件。其次是视频数据的传递,可以采用与文件传输类似的方式。无疑,这种方式是非常的丑陋。
(5)群功能。简单思考一下,会发现这个实现起来比较简单。
尽管,通过种种技巧,我们可以实现一个基于Web的IM,但是它还能当之无愧的称为“即时通讯”吗?从前面的分析我们可以看到,所有的P2P通信都是“伪”即时的,并且如此实现的IM的服务端在用户量稍微大一点的时候的负载可想而知(特别是视频聊天功能,服务器需要暂存多大的数据量?)。
所以,据我所认识的来推断,基于纯Web的IM现在还没有办法做成产品(你自己写个玩玩当然没问题)。当然,也许在我的认识之外可能有更好的解决方案,如果你知道这样的解决方案,请一定要留言告诉我。
我想,有一点是真的,那就是B/S永远也无法吞并C/S的所有领地,有很多应用一定还是非C/S不可的。