webim技术收集笔记_dawn 收集幸福的手作笔记

Jabber是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMPP的技术来自于Jabber,其实它是Jabber的核心协定,所以XMPP有时被误称为Jabber协议。Jabber是一个基于XMPP协议的IM应用,除Jabber之外,XMPP还支持很多应用。
Jabber服务软件有很多,具体可以参考jabber官方网站的列表:
Jabber官网地址:http://www.jabber.org/
常用Jabber服务器软件:http://www.jabber.org/software/servers.shtml其中最为方便安装搭建的无疑是Openfire(Wildfire),一款基于GPL协议开源软件,Openfire有linux、windows和MAC的不同版本,软件需要java环境支持,不过软件本身自带了环境包,你可以根据你的需要下载不同的版本。
下载地址:http://www.igniterealtime.org/downloads/index.jsp#openfire
更详细的安装配制可以参考网页:[url=http://blog.csdn.net/expendable/archive/2007/06/25/1666122.aspx]基于开源jabber(XMPP)架设内部即时通讯服务的解决方案[/url]

JWChat是一个功能强大,基于Web的Jabber™客户端。采用AJAX技术开发,这个客户端只用到了JavaScript与HTML。它具备基本的jabber即时消息功能,用户管理,基于MUC协议的群聊天功能。

近期学习总结:快速学习方法。
从开源代码那里了解到有四种代码可以参考:
1、jwchat
2、claros chat
3、yafamato
4、smark
webim技术收集笔记_dawn 收集幸福的手作笔记
其中jwchat单纯使用js,使用json来做AJAX实现。
smark是openfire的客户端,很多人都在使用它。
其中yafamato就是在他上面的WEB扩展,并且使用struts技术。
claros chat使用yui做为页面布局的扩展,主要使用js,另外使用servelt编程。呵呵
另外提供一套开源框架作为此类Web IM开发的参考:
Java2Script + Smack + Jabber (Gtalk)

示范例子(google talk是基于Jabber的XMPP协议的):
http://demo.java2script.org/gtalk/

其中Java2Script,提供用Java + Eclipse SWT的开发RIA的开发环境:
http://j2s.sourceforge.net/

Smack,提供基于Jabber XMPP协议的Java类库:
http://www.igniterealtime.org/projects/smack/index.jsp

Java2Script Gtalk,提供Java + SWT的桌面版gtalk客户端,可以编译为基于JavaScript + HTML+ CSS的Rich Internet Application:
http://demo.java2script.org/gtalk/

现在WebIM可谓非常流行,其中已实现WebIM的厂商包括大名鼎鼎的sohu,Tencent QQ,MicrosoftMSN,Google Gtalk,新浪,alibaba的淘宝旺旺,很多很多,基于WebIM的聊天引擎设计思路无非以下几种:

  1. Ajax无刷新交互,设计一种时间间隔定期获取数据(如先每5秒刷新一次,再‘按5,10,15,……刷新一次获取数据,目前利用这一思路实现聊天引擎的开源产品很多,大家可以自己到open-open网站查阅)
  2. 基于Pushlet技术的聊天引擎的实现
  3. 基于Comet技术的聊天引擎的实现
  4. 基于Jetty服务器的Comet技术的聊天引擎的实现
  5. 基于XMPP协议的聊天引擎的设计与实现(可以利用Flash或Ajax或Js与Jabber服务器交互)
目前利用的最多的是通过Flash的XmlSocket+JS与网页的聊天UI进行交互或直接利用Flash界面(可基于Flex的AIR或其他等),本文重点介绍第5种聊天引擎的设计与实现,这也是大名鼎鼎Google的Gtalk采用的协议,关于XMPP协议,大家可以查阅http://www.xmpp.org官方网站,先想听听大家的意见,大家一般实现WebIM是怎么来设计与实现的呢?也是用开源的产品么?

引用:http://www.javaeye.com/topic/244917

即时聊天,WebIM开发之通讯模式介绍




我打算写一个系列文章,介绍webim的方方面面,今天开始第一篇。

我之前发布了一个webim,那个im设计了前端UI、交互,后端程序和通讯只是随便写了一下。作为一个交互很多的web应用,良好的后端设计可以减少数据库访问、减轻服务器负载;良好的通讯模式更是可以较少服务器连接数、节省流量。这篇文章主要讲web即时通讯中常用的技术。

HTTP是无连接的,HTTP通讯过程基本就是:客户端发送请求给服务器,服务器接收请求给出响应信息,客户端接收响应信息显示在用户的显示器上,客户端断开连接。由此可知,要实现即时聊天中的”即时”,我们有两个办法:服务器抓住连接不断开和客户端不断的向服务器发起请求实现伪即时。当然用FlashXMLSocket可以实现真正的即时通讯,但这样已经不是使用HTTP协议了,HTTP天生的优势(无需另外开端口、自动穿越防火墙)也就无法体现。

1.短轮询(polling):核心思想是客户端定时去服务器取消息。为了实现即时效果,轮询的间隔必须设计得足够短,另外为了操作的流畅,需要使用Ajax来发送请求。本人的QGYWebIM就是采用的此方案。这种方案的优点是:后端程序编写比较容易,发送完响应信息马上断开连接,不会占用太多服务器资源。缺点是一般情况下,频繁的请求中有大半是无用,这些冗余请求无形中浪费了带宽和服务器资源。我们可以通过判断用户的活跃程度来决策请求服务器的间隔,我在51的一个帖子提到过这种方法,但是间隔一旦长了,消息的传送就有延时,违背了即时聊天的初衷了。

2.长轮询(long-polling):基本原理是客户端向服务器发送请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,连接被断开期间用户的新信息会被服务器缓存起来。客户端处理完响应信息后再向服务器发送新的请求。这种做法的优势是如果用户一直没新消息,客户端不会频繁的轮询去服务器取消息,节省了流量,但是服务器维持长连接是很消耗资源的。具体实现起来,前端这边基本不需要什么改动,依然是用Ajax轮询取信息,后端需要在没有新消息时处理一下。

3.长连接(streaming):其实很早以前就有人使用这种技术来实现聊天室的通讯。以前在页面中嵌入一个iframe,iframe里放一个使用长连接页面,服务器有新消息就会及时的在iframe里反映出来,再依靠客户端的脚本解析出来就OK了。这样做一个比较严重的问题是:使用iframe请求长连接时,无论是IE还是firefox都会认为页面没有加载完而显示进度条,很难看。不过这个问题是可以解决的。firefox支持了StreamingAjax,在readyState为3的时候就能接受数据,所以问题不大;IE则只能在readyState为4,即连接断开时才能得到返回值。但是伟大的Google工程师使用了一个hack成功的解决了这个问题:使用一个被称为“htmlfile”的ActiveX,把iframe放在这个ActiveX里就OK了。

// we were served from child.example.com but
// have already set document.domain to example.com
var currentDomain = "http://exmaple.com/";
var dataStreamUrl = currentDomain+"path/to/server.cgi";
var transferDoc = new ActiveXObject("htmlfile"); // !?!
// make sure it's really scriptable
transferDoc.open();
transferDoc.write("");
transferDoc.write("<scripttype="text/javascript"><!--
document.domain='"+currentDomain+"';
//--></script>");
transferDoc.write("");
transferDoc.close();
// set the iframe up to call the server for data
var ifrDiv = transferDoc.createElement_x_x("div");
transferDoc.appendChild(ifrDiv);
// start communicating
ifrDiv.innerHTML = "";
无疑,使用长连接对于用户来说是最好的方案,用户体验最好(消息能及时的到达)、占用用户带宽最少(不会发送无用的请求),但是会增加服务器的开销;长轮询是折中方案,FacebookIM就是采用这种方案,不过做了一点改动:客户端发起的每个连接服务器都hold10S,这10S中新消息会源源不断的返回给客户端,10s后连接关闭,客户端发起下一个连接。这样做是因为Facebook的用户会不断的打开、关闭新页面,如果每个页面都建立一个永久的长连接,会阻塞浏览器其他请求,服务器也会吃不消的;短轮询因为实现起来简单,适用于小型应用。

http://www.qgy18.com/2008/08/webim-design-transport/


常规来说,有以下方法:

1。使用JavaApplet作为中介和服务器交互。不过用户必须为这交互过程编写Java代码。
2。使用ActiveX控件做中介。但是ActiveX的权限太大,未一定能得到客户信任。
3。使用IFrame把某个窗体隐藏,然后用传统的方法进行GET和POST。不过请求数据的发送和状态都非常难控制
4。使用MSXML的XMLHTTP来进行数据的传输。这个只适应于Win98或安装了MSXML(IE6自带的Windows系统)
5。使用dotnet的Assembly来写客户端程序。不过这需要客户端安装dotnet组件。

Lostinet.Janc(以下称为Janc)是一个实现和服务器交互的组件。
实际上,它没有提供新的方法来进行和服务器的交互。
它的编写目的就只有一个:为了方便:
要方便代码的编写,要方便程序的发布。。

Lostinet.Janc采用第4种方法(使用Microsoft.XMLHTTP)和服务器交互。

从作者采用这个组件做成的聊天室 http://www.lostinet.com/jancchat/guest/ 和论坛http://forum.lostinet.com/Forum.Aspx 可以看到速度实在快的厉害

  

爱华网本文地址 » http://www.413yy.cn/a/25101013/162799.html

更多阅读

幸福婚姻法则 幸福的婚姻法则

幸福婚姻法则——简介 再美满的婚姻也有过一百次以上的离婚念头和五十次掐死对方的想法。更何况这是一个婚姻遭受物质观念、道德底线双重冲击和重建的时代,明明千挑万选,步入婚姻却总是追悔莫及。山盟海誓开始却各奔东西结束也不少见,

幸福的滋味 幸福的滋味作文600字

幸福的滋味幸福,它是什么?1岁时,还不懂什么是幸福,只知道有个叫“妈妈”的人陪就好。2岁时,开始牙牙学语,学会唱、跳,还能逗家人笑,听爸爸妈妈的夸奖,看他们的笑,这无疑是最大的幸福!3岁时,在邻居的帮助与给予下,吃到了糖果,觉得世界上没有比它更

活着,就是幸福的 人活着是为了幸福吗

  幸福是什么?幸福简简单单,重要的是让我们开心的就是属于我们的幸福。幸福可以是功成名就;可以是儿孙满堂;可以是中500万;也可以是跟心爱的人厮守一生……确实,幸福是可以有很多的,但是,活着,却是我们共同的幸福,最幸福的。  那一天朋

中医掠影之七:幸福的理由

西方“科学”的发展总是以开掘一条路,堵塞九条路为代价的。比如,许多人便是生活在“幸福”中也出现许多精神症状。当事人自己找了很多的幸福的理由,试图用理性说服自已,可身体和情绪不听从这些理由,于是生在福中不知福的现象就产生了。

邓荣的微小说:幸福的形状

邓荣1974年生,昭阳区凤凰中学教师。出版有诗集《风大别穿裙子》。幸福的形状那年冬天,阿猪记得,阿猪和母亲一起走了很长时间的路,从他们从前的村子来到这个叫林庄的村子,快过年了,路上几乎没有人。当时天上飘着纷纷扬扬的雪花,地上是白

声明:《webim技术收集笔记_dawn 收集幸福的手作笔记》为网友钻石王老五分享!如侵犯到您的合法权益请联系我们删除