我们要了解Openfire,首先要了解XMPP协议,因为Openfire是用Java语言编写的,基于XMPP协议、开源的实时协作的服务器。Openfire具有跨平台的能力,Openfire与客户端采用的是C/S架构,一个服务器要负责为连接在其上的客户端提供服务。Openfire客户端有spark, pidgin, Miranda IM, iChat等,用户如果自己开发客户端,可以采用遵循GPL的开源Client端API--Smack。Openfire服务器端支持插件开发,如果开发者需要添加新的服务,可以开发出自己的插件后,安装至服务器,就可以提供服务,如查找联系人服务就是以插件的形式提供的。
一、XMPP协议简介
XMPP协议
XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
XMPP网络
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ,Gtalk等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在通道上传输XML。
下面是Openfire, Smack及Client与其它XMPP Server之间通信的结构图。
从图上可以了解到,client 端和server端都可以通过插件的方式来进行扩展,smack是二者传递数据的媒介。
二、Openfire服务器容量
单台Openfire服务器支持3K以上的容量应该是没有问题,但更多的则需要测试。开源版本的不支持Clustering,但我们可以采用Openfire + Connection Manager来扩充服务器容量,有网友测试,在1台8G内存的Openfire服务器上,如果配置好Connection Manager,可以支持到30万用户。 我们可以来算算Openfire + Connection Manager服务器的大概容量。假设一个Connection Manager与Openfire之间各占用20连接,每个Openfire服务器可支持5000个连接,每个Connection Manager可支持3000个连接,如果我们配置4个Connection Manager,则我们可算出Openfire服务器的容量:
1*5000-4*20+4*3000-4*20 = 16840 .
我们做了一个测试,在虚拟机上运行Openfire3.7.0,可以同时登录2W个用户,在加上Clustering之后,只有1W6了。
三、Openfire服务器开发
Openfire是开源项目,我们可以在现有的源码基础上根据自己的需求做修改,以适应自己的项目需求,但不推荐,因为如果我们想扩充服务器性能,可以通过插件的方式来完成,以保证服务器的稳定性。插件开发可参考文章Openfire插件开发。
相关文章: http://www.sunbo.name/20080409/xmpp