基于XMPP协议的高校WEB即时通信系统的应用与集成研究
2015-12-02来天平彭一明高志同
来天平, 杨 旭, 彭一明, 高志同
(北京大学计算中心,北京 100871)
1 背 景
即时通讯(Instant messaging,简称IM)是一个终端服务,允许两人或多人使用网路即时地传递文字讯息、档案、语音与视频交流.透过即时通讯功能,你可以知道你的亲友是否正在线上,与他们即时通讯.WEB即时通信(WebIm)是基于浏览器构建的即时通信,一般是一对一服务.本文关注的重点是WebIm.
目前市场上的及时通信软件产品主要有腾讯RTX,IBM lotus Sametime,微软Live Communications Server.据第三方统计数据,腾讯产品占到国内市场份额的70%[1].在高校中,虽然市场中有可以利用的产品,但高校的即时通信有着自己显著的特征,比如与高校的统一认证集成等功能,现有的软件产品往往无法满足.在高校信息化建设过程中,基于B/S模式建立了成熟的管理系统,但即时通信应用特别是基于WEB模式的即时通信却还在初级发展阶段.一方面是由于厂商的协议与标准不统一,限制了及时通信在企业级应用的发展,另一方面也缺少成熟的与管理系统集成的方案.
XMPP协议可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输,是比较通用的国际性标准协议,具有良好的安全、扩展与标准.利用XMPP协议作为建立高校即时通信系统的基本协议,在开源的软件基础上二次开发,是实现高校即时通信应用集成的有效途径.
2 XMPP
2.1 协议简介
XMPP[2](The Extensible Messaging and Presence Protocol)是由Jabber软件基金会开发,最早在Jabber上实现.Jabber项目是Jeremie Miller在1998年开发的一个免费、开源的项目,用于提供给MSN、Yahoo等的IM服务.XMPP是一种基于XML架构的开放式协议,在IM通讯中被广泛采用,已经得到了互联网工程任务组(IETF)的批准.
XMPP是基于可扩展标记语言(XML)的协议,这表明基于XMPP的应用具有可扩展性.经过扩展以后的XMPP允许通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序.而且,XMPP包含了针对服务器端的软件协议,实现了在不同服务器间进行通话,这使得开发者更容易建立客户应用程序或给一个已配置好的系统添加功能.XMPP在XML结构化数据通信中扮演通用“传输层”的角色,能使数据高效路由到最合适的请求源.除了实现IM的互操作性,XMPP另一个重大用途是通过各类应用实现现场实时信息处理,如CRM协同软件等都可作为XMPP的客户端,所有实体对于XMPP服务器都是透明的,实体中的任何用户的状态对于其他用户都是可见的.
2.2 实现模式
实现XMPP协议的服务器分为两种:服务端软件与客户端软件.
服务端软件是实现即时通信的后台服务器上部署的应用程序,可以响应任何基于XMPP标准的客户端.目前应用范围比较广、成熟的是开源软件Openfire.
客户端软件有两方面的含义.一方面是相对于服务端而言,是XMPP请求的发起者,所以是客户端.另一方面,在WebIm模式下,其是WEB服务器端软件.代表的开源软件是Jwchat.
最终的客户端是浏览器.WebIm通信实现的流程如下图:
图1 WebIm通信流程
2.2.1 Openfire
Openfire[3]是基于XMPP协议的IM的服务器的一个实现,有开源组织jive software负责开发与版本维护,是一款基于java具有跨平台有事的开源软件.它采用的基本技术是jsp+javabean,具有很好的灵活性和可配置性.考虑采用Openfire作为服务端软件,主要是其有如下优点:
(1)完全的基于XMPP协议.支持多种IM客户端软件,实现基于该协议的其他任何软件互联互通,包括CS模式与BS模式.
(2)平台无关性.北京大学目前多采用的是JAVA语言与linux部署,Openfire基于java编程,易于开发人员进行二次开发与维护.
(3)支持插件开发,具有高可扩展性.Openfire会自动识别可用插件,并且在管理界面方便部署,对于第三方插件支持良好.满足实际需求中自行设计和开发的需求.
(4)性能稳定,支持上万用户并发.
2.2.2 Jwchat
Jwchat[4]是一个多功能的基于WEB的XMPP客户端.其使用了AJAX技术,在客户端只用到了JAVASCRIPT和HTML语言.支持基于XMPP协议的即时消息、用户管理及群聊功能.作为WEB形式的即时通信工具,在集成应用中更具有以下特点:
(1)基于B/S模式,无需安装.这与与高校中现有的WEB应用集成模式具有高度的一致性.对用户而言,在进行应用系统使用时,无需再打开新的应用,直接在同一个浏览器模式下进行.
(2)代码开源,系统较为稳定.Jwchat的通信应用程序已经得到广泛应用,得到了实际应用的检验.
(3)易于二次开发.由于Jwchat仅仅采用了前端开发语言JAVASCRIPT和HTML,可以非常容易地集成到任何WEB系统.
(4)易于部署,经济性好.Jwchat只需部署在轻量级的APACHE SERVER或者TOMCAT上即可,对于服务器的性能没有特别的要求.在高校应用级别中,具有经济性的优势.
3 WebIm需求分析
3.1 基本流程
高校中的应用WebIm的典型场景流程(以北京大学为例)如下:
第一步:用户登录高校的应用系统(一般情况下,用户不直接使用浏览器登录WebIm),比如教务管理系统.在登录过程中,采用统一认证进行身份确认与权限认证.
第二步:教务管理系统通过WebIm后台得知是否本系统需要采用WebIm,以及获得对应的用户USER、用户组GROUP信息.GROUP中包括了该用户已经具有的好友信息.如果需要WebIm通信,则进行下一步.
第三步:根据返回的用户信息,显示用户的登录状态与离线消息.如果有离线消息,给用户提示.用户可以与登录用户开始进行WebIm通信.
3.2 个性化需求
上面基本流程反映出出高校中的WEB即时通信具有明显个性化需求.WEB即时通信应用作为高校内部的应用系统,除具备一般信息系统的灵活性、实用性和稳定性外,还要注意:
(1)WebIm的应用主体是管理与服务单位人员.
学校的人群主体分学生、教师、管理服务人员.学生和教师的沟通平台主要是建立的教学平台,比如北京大学建立的教学网,其提供了类似课件、视频、作业管理等强大的教学功能.而服务单位的服务人员,比如教务员等就缺乏有效的沟通工具,一般采用电话、邮件,或者QQ等方式进行交流.
(2)WebIm的界面需集成于现有的WEB信息化系统中.
高校中用户一般不直接使用WebIm进行通信,往往是绑定于一定的业务系统.在进行业务工作时,方便人与人之间的交流.
(3)用户认证、权限管理统一于校信息化系统.
北京大学具有统一的身份认证系统IAAA[5],用户的帐户信息及认证信息不能在WebIm再进行建立.否则将给用户带来极大的不方便.
(4)用户不能自由增减用户.
WebIm的用户群体是在校的老师、学生,数据来源于学校的人事、学生管理系统.在WebIm中不能由用户自由地增加或删除用户,否则用户的信息准确性就得不到保障.
(5)用户组管理实现自动化,无需用户定义.
教务员分为管理本科生和研究生两类.用户无需在WebIm中重新定义组,从教务管理系统中获得这些附属信息,自动在WebIm中进行注册,为用户提供最大的便利.
(6)WebIm可以适用于多套应用系统,实现一套WEB应用,多处收益.
建立WebIm平台,可以同时服务于多套系统,比如本科生管理系统、研究生管理系统、人事部管理、财务管理等.
4 建设方案
通过上面的需求分析,实现高校中的WebIm应用关键是与高校系统的集成.
4.1 构架设计
其体系构架如下图所示:
图2 高校WebIm体系构架
(1)用户U通过浏览器访问高校应用A.
(2)应用A向统一认证进行身份认证.
(3)如果认证通过,应用A向WebIm服务端的服务器申请A在WebIm中的访问权限.
(4)如果具有访问权限,通过统一认证,获得用户U在WebIm的访问权限.
(5)如果U具有WebIm访问权限,通过应用A的实际用户情况,在统一认证中获取在应用A中用户的GROUP信息.
(6)根据GROUP信息,由应用A在WebIm中自动登记好友及分组信息.如果已有,则忽略.
(7)应用A在工作页面中建立新的浏览器窗口,访问WebIm客户端.
(8)WebIm客户端向WebIm服务端请求用户登录情况,在WebIm浏览器中显示用户分组与在线情况.
(9)用户U在WEB界面中开始进行WEB及时通信.
4.2 集成方案
集成工作主要有三部分:统一认证、用户自动管理、前台页面.
4.2.1 统一认证
北京大学的统一认证是IAAA系统.访问应用系统时,首先用户需在IAAA认证界面中输入用户名和密码,认证通过后,返回一个TOKEN.应该系统根据TOKEN来确定认证是否成功,如果成功,再通过IAAA提供的WEBservice获取权限信息.
将WebIm统一于IAAA认证,需要在Jwchat插入认证机制.
我们以Jwchat部署在tomcat上为例.
实现认证机制的插入,在不进行源代码修改的目标下,最好的处理办法就是建立FILTER,比如名称为authorityFilter.FILTER的主要方法定义:
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException{}
用request来获得TOKEN后进行MD5验证.
除此之外,需要在WEB.xml中部署filter.类似如下形式:
4.2.2 用户自管理
用户信息包括用户USER和组信息GROUP.要实现用户的自主管理,需要在应用系统中增加用户管理的方法.当用户登录应用系统后,从IAAA已经获得了相关的组信息以及组成员信息.通过对WebIm数据库的直接访问实现用户的自动关联.
(1)表OFUSER,存储用户信息
主要字段:username,plainPassword,name.
其中username是用户的注册id,是主键,而name是显示在页面中的昵称.
(2)表OFGROUP,存储组信息
主要字段:groupname.
Groupname是group的主键.
(3)表OFGROUPUSER,存储组与用户的对应关系
主要字段:groupname,username,administrator.最后一个标识是否是组的管理者.
(4)表OFGROUPPROP,组的详细信息
本表数据是能否在浏览器中正确显示组的中文信息的关键表.
关键字段:groupname,name,provalue.
如果要实现组成员的自主发现,而别人看不到该组,需要如下定义:
INSERT INTO OFGROUPPROP VALUES('Group3','sharedRoster.showInRoster','onlyGroup')
4.2.3 前台页面
Jwchat的前台页面是一整套的即时通信产品.包括用户登录、注册、聊天等功能.集成于高校应用系统后,需要如下工作:
(1)取消原有的登录,实现自动登录.
Jwchat提供了两种方式,一种是用户输入用户名、密码登陆;一种是自动登陆.要实现集成并且自动登陆,需要修改Jwchat.html页面.主要代码如下:
在初始化的时候,指定关键参数
然后直接访问Jwchat就可以了.
(2)利用css修饰Jwchat界面.
(3)取消用户自定义添加用户、删除用户等权限.
(4)好友排序原则修改为中文拼音规则.
原有排序原则是按照英文顺序,在中文模式下,修改roster.js中rostersort方法如下:return(a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
5 小 结
本文提出了在高校信息化系统中,利用开源软件Openfire、Jwchat进行WebIm应用的开发与集成的方案.方案重点在于集成的实现,并根据本校特点进行二次开发,在北京大学的实践中取得了良好的效果.方案的整体开发成本和服务器成本都比较低廉,根据不同高校的不同需求,还可以进一步二次开发,所以框架具有很强的推广价值.
[1] Report on China’s IT Consumption Survey 2008(in Chinese).
[2] http://xmpp.org/about-xmpp/technology-overview/.
[3] http://www.igniterealtime.org/projects/openfire/.
[4] http://jwchat.org.
[5] 欧阳荣彬,王倩宜,李丽,等.基于属性规则的用户授权模型研究与实现,中山大学学报,2009,48(S1):277-279.