`
zyjwy02
  • 浏览: 141158 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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的实现比较精简和优雅,但如果想作为一个大型的高效消息投递系统还是有改进的空间。
类别: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 <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/

分享到:
评论
1 楼 zfms 2012-10-28  
写的不孬,有时间交流一下

相关推荐

    openfire消息、监听、启动流程分析

    在Openfire中,消息、监听和启动流程是其核心功能,理解这些流程对于管理和维护Openfire服务器至关重要。 **Openfire消息流程**: Openfire的消息传递主要通过XML stanza(元素)进行,包括IQ、MESSAGE和PRESENCE三...

    openfire处理消息流程及openfire详细信息

    ### Openfire消息处理流程与详细信息解析 #### XMPP协议概览 XMPP,全称Extensible Messaging and Presence Protocol,是一种基于XML的即时通讯协议。它不仅用于消息发送与接收,还支持状态更新和在线状态通知,即...

    openfire消息接收、处理流程图.JPG

    openfire消息接收、处理流程图.JPG

    openfire消息接收、处理流程图

    这里是个人绘制出的openfire流程图的初稿,里面包括:message、presence、iq节的接收类与相应的处理方法...到最后的处理过程。图的缩略图见:http://blog.csdn.net/love254443233/article/details/7891236。 该图仅...

    openfire+asmock实现android消息推送

    Openfire支持XmppPush,可以将服务器端的新消息推送到客户端,即使应用在后台或者设备熄屏状态下也能接收到通知。这通常涉及到Android的GCM(Google Cloud Messaging,已被FCM替换)或Firebase Cloud Messaging服务...

    基于openfire的web在线聊天源码

    【基于openfire的web在线聊天源码】是一个实现网页端即时通讯系统的开源项目,它利用了Openfire服务器作为后台支持,提供了丰富的功能,包括联系人分组、群聊、在线状态修改、群成员邀请、设置群管理员以及踢人等,...

    openfire即时消息处理

    它不仅用于即时通讯(IM),还可以处理在线状态(presence)和其他实时通信需求。由于XML的可扩展性,XMPP能够支持各种自定义功能和应用集成,例如在企业环境中提高生产效率或在游戏中实现沟通与协作。 在开源社区...

    Openfire下实现WebServer

    总之,实现在Openfire下运行WebServer涉及多个步骤和技术,包括选择合适的WebServer、集成Openfire的插件系统、设计Web应用的架构以及处理安全性问题。通过以上介绍,你应该对这个过程有了一个全面的了解。

    openfire获取所有在线用户插件

    自己写的获取所有在线用户的openfire插件,直接上传到openfire服务器即可使用,访问路径为host:port/plugins/onlines/listall

    openfire处理消息流程,及openfire详细信息.docx

    【Openfire 消息处理流程详解】 Openfire 是一款基于 XMPP 协议的即时通讯服务器,它与其他的客户端(如 Spark)以及传输协议实现(如 Smack)一起,构成了一个完整的 XMPP IM 解决方案。XMPP,即可扩展消息和存在...

    原创openfire插件(发送在线消息、离线消息)

    目前研究插件的还比较少,简单做一下学习总结。详细介绍请看我的blog:http://hi.baidu.com/jyleon/blog/item/5a6627dd7fc4dbd18d1029bf.html

    OpenFire所有在线用户

    这里的"127.0.0.1"是本地主机地址,"8080"是OpenFire服务器运行的端口,"/plugins"表示服务器提供的插件服务,"onlineuser"可能是处理在线用户查询的特定插件名,而"getallusers"则可能是该插件提供的一个API端点,...

    openfire消息回执插件

    Openfire是一款开源的即时通讯服务器,它基于XMPP(可扩展消息处理现场协议)标准,提供强大的实时通信功能。在Openfire的生态系统中,开发插件是增强其功能的有效方式。本文将深入探讨“Openfire消息回执插件”,并...

    Openfire即时消息传输平台 v4.8.0 源码包.zip

    Openfire即时消息传输平台是一款基于Java技术的开源通信系统,它允许用户通过XMPP(Extensible Messaging and Presence Protocol)协议进行实时的、双向的通信。Openfire v4.8.0是该平台的一个版本,提供了丰富的...

    手机接受openfire推送的消息

    Openfire作为XMPP服务器,负责处理客户端的连接、认证、会话管理和消息路由。 1. **安装与配置Openfire**: - 下载并安装Openfire服务器:访问官方网站下载最新版本的Openfire,按照提示进行安装。 - 配置服务器...

    openfire消息机制和源码分析

    资料中涵盖了Openfire的内部工作原理、消息处理流程、以及如何通过插件扩展其功能。 标签中的“openfire xmpp 消息机制 客户端”说明了该资料主要围绕Openfire服务器、XMPP协议、消息机制和客户端交互等方面展开。 ...

    用flash+xiff+openfire 实现网页端接收推送消息

    标题中的“用flash+xiff+openfire 实现网页端接收推送消息”指的是一种技术...总之,这个技术组合实现了基于Flash的网页端即时消息推送,通过XIFF库实现与Openfire服务器的XMPP通信,为用户提供实时的在线聊天体验。

    openfire的用户接收消息计数器

    Openfire是一款开源的企业级即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,提供稳定且可扩展的实时通信服务。在Openfire中,实现用户接收消息的计数功能是提升通信效率和监控系统...

    openfire推送

    首先,Openfire服务器控制台中的管理消息模块是用于向在线用户发送通知的,它可以看作是一种推送方式。该模块实现的功能和broadcast(广播)插件类似,都允许服务器向所有或特定用户发送消息。Broadcast插件实际上是...

    agsxmpp与openfire服务器通讯

    总结,agsxmpp与Openfire的通讯涉及XMPP协议、网络安全、认证流程、消息格式等多个方面。在遇到登录或发送消息的问题时,应从网络、认证、权限和服务器配置等多个角度排查和解决。而SCADAInfoSys文件可能提供了SCADA...

Global site tag (gtag.js) - Google Analytics