百度空间 | 百度首页 
 
文章列表
 
您正在查看 "Openfire" 分类下的文章

2009-03-11 13:22
seaboyHe
楼主您好,有个问题请教,目前OpenFire是否支持分布式Server,单台服务器(Intel双核2.8,4G内存)能支持多少用户同时在线?谢谢了

匿名网友
回复seaboyHe:据称2006年的时候我看到说是可以支持33K并发 但是目前来看 貌似 单台服务器 支持5K+应该没问题 我现在用的OpenFire 3.63 我做个测试 使用多台服务器 互相联系 很方便 以前 看到一个帖子说 他的每个线程 占用内存为4KB 理论上 支持30W用户应该可以 但是 OpenFire 团队 现在一直对这个负载能力 遮遮掩掩的 没有在实际的应用中是很难 得到一个准确的 数字的 但是我相信 不管他的负载能力有多大 我们使用分布式的服务器 也一定可以达到恐怖级别的负载的 希望 在这方面 有研究 或者 正在研究的朋友跟我多多交流 大家整合下自己的东西 互相学习下 本人 目前在开发一个基于OpenFire 的IM系统!本人QQ:21999481

Tim
很多打算采用openfire的朋友第一件事就是了解openfire的容量,因为开源版的openfire不支持clustering,所以这确实是一个很重要的问题。在openfire+connection manager的配合下,openfire在1台8G的主流服务器支持30万用户肯定没有问题,当然需要部署更多的connection manager作为前端来支持。openfire的瓶颈主要在内存占用方面,根据另外一位资深同事的优化尝试,如果将session内存占用优化,session里面尽量不用集合类,跑到40-50万用户也能稳定运行。
类别:Openfire | 评论(15) | 浏览()
 
2009-02-19 23:54
最近由于Google App Engine宣称即将支持XMPP收发消息,所以就测试了一下Python的XMPP支持。

Python有2个XMPP library可供选择:xmpppypyxmpp。刚接触的开发人员通常会很关心它们究竟有什么区别,或者哪个更适合自己。一般公认的看法是 pyxmpp 是首选,它完全符合XMPP协议,开发也保持活跃的状态,并且最新的版本是2009年发布的。而xmpppy则公认为设计上有不太合理之处,也不完全符合XMPP协议,所以不推荐使用。

pyxmpp自带了几个examples,比如将c2s_test.py, 改下用户和密码和domain,就可以连接到任意标准的XMPP server。但是最近在测试用pyxmpp连接到openfire, 在验证了用户名和密码之后却会卡住,在屏幕上显示了这行信息之后就没有下文了。

creating stream...
connecting...
Creating client stream: <class pyxmpp.jabber.clientstream.LegacyClientStream at 0x82e1b9c>, auth_methods=['sasl:DIGEST-MD5', 'digest']

结论也就是说目前版本的 pyxmpp 是不能登录 Openfire 的。

后来在jive的论坛看到Openfire is incompatible with pyxmpp echobot,才确定这不是一个偶然现象。后面的原因竟然是openfire返回的iq bind的to不符合协议导致。
<iq type="result" id="46425" to="tim/abcdef">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
    <jid>tim@server/python</jid>
</bind>
</iq>

按照XMPP RFC规范 rfc3920中的例子,在client bind成功之前,server给client是不需要带to的。
<iq type='result' id='bind_2'>
<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>
    <jid>somenode@example.com/someresource</jid>
</bind>
</iq>

上面那篇文章在jive论坛已经而openfire社区已经很久时间了,但由于openfire的社区大部分开发人员都用smack, libjingle之类的客户端,大家也没发现这个问题,所以也没得到开发团队重视。

Openfire 的相关实现是在IQBindHandler.java中实现的,这里并没有明显的设置 to, 但由于IQHandler实现的上层会给每个包自动加上to, 所以就导致了这个现象。但如果要改这个逻辑就对openfire改动较大,也容易引起其他的问题。所以最简单的方法是在IQBindHandler里面设 置一个正确的to, 虽然没完全符合协议,但是可以避免目前pyxmpp遇到的类似问题。

结论是在在IQBindHandler.java增加一行即可解决pyxmpp不能登录的问题。

child.addElement("jid").setText(session.getAddress().toString());
// add the following line
reply.setTo(session.getAddress());
类别:Openfire | 评论(0) | 浏览()
 
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 | 评论(3) | 浏览()
 
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 | 评论(4) | 浏览()
 
2007-12-17 11:51
  • 本来以为 fastpath 是个纯 web im spark, 但是安装之后发现是个客户服务的系统。
  • 安装 Openfire Enterprise 才有这个模块,openfire enterprise 要收费的,但是试用版可以支持5个用户,不违反授权,永不过期。
  • 界面是英文的。但是可以自己改jsp。
  • 管理端要用spark
  • 在线/离线的图标是一段代码,可以插入到任何网页中(asp,php...)
  • 离线状态下用户在网页的留言可以自动发送email
  • 支持workgroup,应答人员可以1到多个,随时调整,不需要改网页代码。
  • 支持按Lucene全文检索匹配条件指定服务端应答用户。
类别:Openfire | 评论(5) | 浏览()
 
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 | 评论(5) | 浏览()
 
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 | 评论(3) | 浏览()
 
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/

原来的 Wildfire 相关文章见:
http://hi.baidu.com/jabber/blog/category/Wildfire
以后相关文章都归类到Openfire下。
类别:Openfire | 评论(4) | 浏览()
 
     
 
 
文章分类
 
 
Jep(11)
 
Xmpp(21)
 
 
 
 
 
Mysql(10)
 
 
 
 
 
 
 
 
Xep(1)
 
 
     
 
文章存档
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
最新文章评论
   
 
 

回复阿连:管理员登录名是 admin 不是邮件名,第一次配置好后记得重启一下openfire
 
 
 
     


©2009 Baidu