Openfire Server presence(在线状态)消息处理流程

2008-06-30 22:45
Presence处理是IM Server的核心,也是一个IM Server最复杂的部分。一个用户的状态发生变化,需要通过服务器自动投递给他所有在线的好友,因此Presence模块实际上等同一个消息处理服务器,可参看以前消息服务器相关文章 ActiveMQ性能研究及与memcacheq比较

Presence的复杂性体现在:

1. 由于每个用户都有1到多个好友,服务器的处理量被放大。
2. 分布式处理的复杂度,你的好友可能同时分布在n个服务器上,而且同时上线的好友没有规律。
3. 请求量不均衡,可能瞬时非常大。比如你服务器刚重启所有的客户几乎同时自动重连过来。比如Twitter宕机都是在一些热点事件时,大家活跃度突然同时增大。所以系统必须按峰值的处理量设计。
4. 缓存cache设计困难。每个用户的在线好友都不同,而且随时在变。
5. 隐身同黑名单的业务逻辑很难高效处理。

Openfire Server处理presence的流程如下,以3.6.0为准。
Openfire Server presence(在线状态)消息处理流程_第1张图片


1. ConnectionHandler.messageReceived();
mina 层面处理。

2. StanzaHander.process() => processPresence
xmpp 层面。处理所有xmpp包的方法,实际上只有login相关包在这里处理。其他类型的包交由相关逻辑类来处理。 由于是个presence包,交由下面presence逻辑处理模块进行。(also add from to packet)

3. PacketRouteImpl.route() // route presence
4. PresenceRoute.route() => handle() // route presence
由于presence是一个需要路由的包,路由主要区分目标是本机还是远程,是component/server还是普通用户。

5. PresenceUpdateHandler.process() => broadcastUpdate
// process() update db and update cache,
calls PresenceManager.userAvaliable(); session.setPresence()...

6. Roster.boradcastPresence();
检查privacy list(隐身及黑名单用户)然后路由给所有在线好友。

7. RoutingTable.routePacket, routeTable.getRoutes()
真正的工作在这里,较慢。

8. session.process(), session.deliver
已经分发到相关用户了,调用该用户的session投递给此用户

9. nioconnection().deliver, deliver to the end users
再回到MINA

因此Presence投递工作的核心是在6~7,不过其他的步骤也有不少细节的处理。Openfire中6~7的实现比较精简和优雅,但如果想作为一个大型的高效消息投递系统还是有改进的空间。
类别:Openfire <script></script> | 评论(3) | 浏览(709) <script></script>
 
2008-04-17 16:46
  • 比较有价值的,有fastpath和archive,fastpath可看我前面的介绍:fastpath 基于openfire 的客服 web im;chat archive就是在服务端保存所有聊天历史的支持。
  • openfire clustering集群不会开源,由于集群90%的功能是通过Coherence clustering software第三方软件来实现的,并不是openfire本身的功能。Coherence是一种内存共享的模型,内部处理多台服务器的逻辑,上层的应 用可以当作单机来使用。这个模块担心以后版本会去掉,jive是想把openfire丢出去给开源社区,只剩下clustering商业化也没什么价值。另外jive在短 期之内把clustering重新开源实现的可能性也比较小。本来就不是它的看重,以后更不会是。特别看重cluste功能的用户最好去投奔ejabberd了。
  • Jivesoftware 今后的核心转移到 clearspace 上了,今后 openfire 最大的工作是整合 clearspace 并提供所需的social & collaborative的功能。XEP的支持不是首要考虑的,不过目前的XEP也够用了。
  • Clearspace整合。从最新的源代码也可以看到,增加了许多 clearspace 的程序。对于单独部署 openfire 的用户那些功能可能是鸡肋。
我个人比较希望的改进
  1. web im。纯Web,使用comet/HTML/ajax,不是基于flash的XIFF, Flash虽然也不错,但是与其他应用集成不便。
  2. 开放性。服务器架构的开放, plugin机制已经做得不错了,不过有不少需求还是需要改源代码才能实现。改了源代码,服务器又有新版本了比较烦。
  3. 独立性。最好不要做 org.jivesoftware.openfire.clearspace 这样的集成,感觉丧失了独立性,如果需要对外提供roster等功能,可以做成标准的api,第三方也可以用。不要成为clearspace的附庸。
  4. c++ 的客户端,pidgin那样的最好,啥都可以连,spark国内的接受程度低。(4应该没有可能:)
即将(据说是4/27)开源的功能
  • Reporting and Chat transcripts plugin - 一般
  • SparkWeb - SparkWeb 是基于flash的。
  • Client Control plugin - the ability to manage clients will be available as an Openfire plugin
  • Fastpath plugin - Web IM
稍后开源的,估计还要等几个月
  • Reporting and chat archiving - 就是聊天记录保存在服务器。
类别:Openfire <script></script> | 评论(5) | 浏览(1056) <script></script>
 
2007-12-17 11:51
  • 本来以为 fastpath 是个纯 web im spark, 但是安装之后发现是个客户服务的系统。
  • 安装 Openfire Enterprise 才有这个模块,openfire enterprise 要收费的,但是试用版可以支持5个用户,不违反授权,永不过期。
  • 界面是英文的。但是可以自己改jsp。
  • 管理端要用spark
  • 在线/离线的图标是一段代码,可以插入到任何网页中(asp,php...)
  • 离线状态下用户在网页的留言可以自动发送email
  • 支持workgroup,应答人员可以1到多个,随时调整,不需要改网页代码。
  • 支持按Lucene全文检索匹配条件指定服务端应答用户。
  • Openfire Server presence(在线状态)消息处理流程_第2张图片
类别:Openfire <script></script> | 评论(4) | 浏览(1649) <script></script>
 
2007-10-05 17:15
Jive software 产品有Clearspace, Openfire, Spark 等。有超过 1,400 个大客户使用公司产品, including
Apple, Nokia, Deloitte & Touche and Delta Airlines.

Jive Software has over 1,400 customers globally, including IBM, Sun, Oracle,
BEA, Deutsche Telekom, USJFCOM, Citrix and Toshiba.

Jive announced on August 29 that it has received $15 million in funding from Sequoia Capital( 红杉资本).

资金主要用于产品研发。包括公司的拳头产品Clearspace,此产品将和IBM,Microsoft竞争。Openfire预计也会加大投入,所以从发展的眼光来看,Openfire将会在XMPP领域更加一枝独大。

Jive目前有63名员工,2007销售收入预计是1500万美元。

Source: eWeek, http://www.eweek.com/article2/0,1895,2173834,00.asp
类别:Openfire <script></script> | 评论(5) | 浏览(505) <script></script>
 
2007-06-28 16:10
SparkWeb 是一个基于Web ajax技术的XMPP客户端,就是一个web版的spark,安装比较简单,
将sparkweb.war copy到plugins目录即可,也可以在 web 管理后台通过添加 plugin 实现安装。它需要 Openfire 的 http binding 模块的支持。

安装完之后的访问路径是:

http://<服务器名>:<http-binding端口>/sparkweb/

本机访问的话通常是 http://localhost:8080/sparkweb

sparkweb 采用商业授权。

http://www.jivesoftware.com/products/openfire/features/sparkweb.jsp
类别:Openfire <script></script> | 评论(3) | 浏览(1990) <script></script>
 
2007-05-09 19:40
最近又有一系列创新的和产品和网站是基于 Openfire 的……

IMified
IMified 提供了任务管理、提醒,代办等工具, 通过IM机器人来支持AIM, MSN, and XMPP/GTalk。他们刚发布了了一个API,可以用它非常容易的创建支持所有主流IM平台的机器人,把我们想干的事都做了啊,他们的后台则是采用Openfire的。

Mosoto
Mosoto是一个for Facebook的即时协同系统,同时也具备文件和音乐共享功能。他们是领先的实现Facebook API实现厂商之一,并且具有漂亮的Flash界面。目前是Alpha版本的, 应该会迅速壮大和成熟(想想Facebook的用户数). 他们也是基于Openfire 和 XIFF Flash API.

Justin.tv
最后, 我们听说国外的一个Web 2.0大会Justin.tv使用的聊天技术也是基于的。如果你没有去过这个网站, Justin使用一个移动的摄像机 24×7 向网站进行直播的,有兴趣可以去了解一下

3个例子代表了一种趋势: 我认为 XMPP 将会在下一代web的架构中(包括Google)发挥一个关键的作用,最近的一些相关协议如BOSH (for网页的XMPP), Jingle (voice and video) and PEP (advanced presence features)将会推动这方面的发展。

Tim 翻译 http://hi.baidu.com/jabber/blog/category/Openfire
自igniterealtime(原来的jivesoftware)的网站 http://www.igniterealtime.org/blog/2007/04/30/openfire-powering-web-20/

你可能感兴趣的:(Web,应用服务器,Ajax,Flash,Mina)