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为准。 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的实现比较精简和优雅,但如果想作为一个大型的高效消息投递系统还是有改进的空间。 |
2008-04-17 16:46
|
2007-12-17 11:51
|
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 |
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 |
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/ |