基于XMPP协议的手机多方多端即时通讯方案
一、开发背景
1、国际背景
随着Internet技术的高速发展,即时通信已经成为一种广泛使用的通信方式。1996年Mirabilis公司推出了世界上第一个即时通信系统ICQ,不到10年间,即时通信(Instant Messaging,简称IM)以发展成为了最流行的网络应用之一。特别是近几年的迅速发展,即时通信的功能日益丰富,它不再是个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、音乐、电视、游戏、电子商务等为一体的综合化信息平台。
2、国内背景
目前国内外及时通信软件IM(Instant Messenger )形势风起云涌,可谓战况空前,IM作为继Email和Web之后最主要的互联网基础应用之一,为商家必争之地。国内的形势由于QQ的垄断性优势明显,表 面稍显平静,实则暗流涌动。目前来看,胖企鹅公司以压倒性优势占据了国内IM市场近八成份额,并且紧紧抓住低端市场,用户数量庞大,盈利丰厚。其他的IM 微软MSN(WLM)、网易POPO、新浪UC、TOM Skype、Google Gtalk等占有率较为惨烈,还有雅虎即时通、AIM、ICQ以及传闻中的Baidu IM和搜狐搜Q以及一些目前并不出名的如校内网的校内通,Lava-lava等等等等,凡在国内叫得上号的叫不上号的互联网企业,几乎没有不推IM的,甚 至连中国移动都力推飞信,希望分得一杯羹。然而这些即时通讯不能实现互联互通,限制了用户的扩展。
3、为什么选择XMPP协议
虽然现在即时通信软件有很多,但是它们之间不能互联互通也阻碍了及时通信用户的继续扩展。因此,在现阶段的各种即使通信服务,没有统一的标准,无法实现互联互通的局面下,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互通。有了这个协议之后,使用任何一个组织或者个人提供的即使通信服务,都能够无障碍的与其他的及时通信服务的用户进行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP协议的即使通信软件。
目前IM即时通信有四种协议:
1.即时信息和空间协议(IMPP)
2.空间和即时信息协议(PRIM)
3.针对即时通讯和空间平衡扩充的进程开始协议SIP
4.XMPP协议:该协议的前身是Jabber,我们采取XMPP协议主来实现IM主要是考虑XMPP协议是以XML为基础的,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的,所以XMPP信息不仅可以是简单的文本,而且可以携带复杂的数据和各种格式的文件,也就是说XMPP协议不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流,目前支持XMPP协议的即时通讯工具有Gtalk、FaceBook IM、Twitter、网易POPO等等通讯工具,具有非常好的发展情景。
正如任何事物都有其自身的发展规律一样,技术和产品的进步也有其自身的规律。
从萌芽到混乱最终标准化,这是互联网产品的基本规律。IM跟其实发展自Email,跟Email有着很多共同点。让我们来对比一下Email目前的情况,或许会有些启示。Email现在已经被广泛应用,谁都不能质疑其互联网第二应用的地位(第一应用是Web)。 Email之所以能广泛地被应用最关键的原因应该是Email有一套开放标准的协议规范(包括SMTP、POP、IMAP 等),任何人都可以基于这些协议规范开放自己的Email产品,不管是Email服务器也好,Email收发客户端也罢还是现在颇为流行的Web形式的 Email界面,它们都是基于同一套标准。在这套标准的框架下,各个Email相关厂商都各自占据产业链的相应位置,相互合作相互竞争,这才是一个百花齐 放的健康竞争环境,而且这种健康竞争最终受益者还是广大用户。
XMPP(www.xmpp.org)由Jabber软件基金会开发,最早在Jabber上实现。Jabber项目由Jeremie Miller在1998年开始的一个免费、开源的项目,用于提供给MSN、Yahoo!的IM服务。由于XMPP是一种基于XML架构的开放式协议,在IM通讯中被广泛采用。
XMPP的基础部分已经在2002-2004年得到了互联网工程任务组(IETF)的批准, 这意味着XMPP在将来就像我们认为理所当然的Internet协议TCP/IP、HTTP、FTP、SMTP、POP一样成为Internet标准;这 意味着以后我们就像使用Web、使用Email和使用FTP一样开放地使用IM。甚至若干年后人们会理所当然地认为163的邮箱可以给Hotmail发邮 件一样,QQ用户也可以添加Gtalk用户,人们会逐渐忘却当年军阀割据纷乱的历史。这是一种革命性的进步!不支持XMPP的IM将会像IBM的 Token-Ring一样孤芳自赏或者像DEC NET协议一样被人遗忘。遥想当年DEC NET和IBM Token-Ring也是多么意气风发羽扇纶巾啊!
在XMPP被批准之前,世界上已经存在了数十种支持XMPP的服务器端和客户端以及数百万用 户。嗅觉灵敏的Google作为开放源代码社区和开放标准的最大受益者,第一时间感受到了这种趋势,所以花重金将Gaim的作者挖去Google,于是就 有了基于XMPP的Gtalk。
开放的标准协议会导致产品的竞争更为健康和良性,整个产业链更为完善。当然产品之间的竞争唯 一的趋势就是同质化,产品发展到后期比拼的只有服务。这一点在传统产业已经被完全验证,互联网产业也不能逃脱。至于到时用户是选Gtalk呢还是选 POPO呢,就像用户现在选Gmail还是163的邮箱一样,可以各有所好。不过IM在扩展功能以及增值服务上还有非常大的竞争余地。
二、Xmpp协议介绍
1、Xmpp协议概述
XMPP(Extensible Messaging and Presence Protocol,前称Jabber[1])是一种以XML为基础的开放式实时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。
XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发 送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol , XMPP) 是一种基于可扩展标记语言(eXtensible Markup Language, XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML 结构化数据中, 使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。XMPP 协议已被批准为互联网即时通信协议标准。
2、Xmpp协议内容
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
3、Xmpp协议优点
开放—XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。
标准—互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
证实可用—第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作著,并有数以百万计的人们使用XMPP实时传讯软件。
分布式—XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。
安全—任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自带于核心XMPP技术规格中。
可扩展—XML命名空间的威力可使任何人在核心协议的基础上建造客制化的功能;为了维持通透性,常见的扩展由XMPP Standards Foundation。
弹性佳—XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
多样性—用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。
4、Xmpp协议缺点
数据负载太重:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
没有二进制数据:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
5、Xmpp提供电子名片协议
vCard是一种现存的、广泛使用的,用户个人信息存储的标准,有点像是电子名片。基础的功能是存储和获取用户的电子身份,该信息是用XML表示的,数据的存储取决于所有现存的Jabber服务器的实现。
6、XMPP系统特点
客户机/服务器通信模式、分布式网络、简单的客户端、XML的数据格式。
三、服务器端介绍
1、什么是Openfire
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器.
Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.
2、为什么使用Openfire
A、Openfire为Java开源项目
B、 采用开放的XMPP协议
C、 有多种针对不通系统的版本
D、使用Socket通讯
E、 单台服务器可支持上万并发用户,搭建分布式云服务器可轻松提供大量并发用户。
F、 Socket长连接
G、服务器稳定
H、提供接口,可自己开发插件
3、Windows下搭建服务器
JDK1.6 + Openfire For Windows + Mysql5.5 + Tomcat6
4、Linux下搭建服务器
JDK1.6 + Openfire For Linux + Mysql5.5 + Tomcat6
5、Mac下搭建服务器
四、客户端介绍
1、手机客户端
A、ForAndroidClient
手机登录界面
手机IM联系人列表
手机用户与PC客户端用户聊天
手机用户与Web端用户聊天
B、ForMobileClient
C、 ForIphoneClient
D、 ForSymbian
E、ForWp7
2、Pc客户端
A、SparkForJava(OpenSource)
PC端用户登录界面
PC端IM联系人界面列表
PC端用户与手机端用户聊天界面
PC端用户与Web端用户聊天
B、SparkForC# (OpenSource)
2、Web客户端
A、RIA (Flex And Silverlight)
B、 Html5
C、Web2.0
Web端登录
Web端与PC聊天
Web端与手机端聊天
五、环境搭建
1、安装JDK
下载官网的JDk,并且正常安装,待安装完成后设置环境变量。
2、安装OpenFire
下载Openfire,并正常默认安装。
3、安装Mysql
下载安装Mysql,指定Mysql的用户名和密码,以及数据库使用的编码。确定是否允许远程访问该数据库。
4、安装Apach Tomcat
下载Apach基金会下的Tomcat服务器,并且解压安装。
5、配置环境
登陆Openfire服务器控制台,设置相关的信息。如:端口,插件等。
并将项目部署到Apach tomcat中。
6、安装项目
1、 ForAndroid
从Tomcat中下载android的项目XmppClientForAndroid.apk,并在手机中安装。
2、 ForPc
从Tomcat中下载Pc的项目 Spark.exe,并在手机中安装。
3、 ForWeb
打开Tomcat中的项目,直接运行登陆。
点击运行后:
7、设置服务器地址
ForAndroid、ForPc、ForWeb 都提供了个服务器地址设置的地方。默认Openfire的端口为5222.(除,Silverlight 的端口必须为 4502-4532)
8、注册用户
可以在服务器端直接注册用户,也可以在客户端注册用户。
9、进行相对应的操作
相对应的即时通讯方面的操作。
六、项目演示
1、服务器端设置
A、Openfire 控制台
服务器主界面:
控制台主界面:
控制台内部管理:
用户/组管理:
会话管理:
聊天管理:
A、Mysql数据库
数据库表结构:
2、客户端设置
A、ForAndroid
B、ForPc
C、ForWeb
七、多方、多端即时通讯
1、QQ、FaceBook、Twitter、MSN Messenger、Yahoo Messenger、AIM、Gadu-Gadu、ICQ、Google Talk、Popo
研读不同的通信协议,将Internet中常用的IM集成在一起,使得用户在操作系统中不必安装太多的聊天软件。
2、PC、Pad、Phone、Web
用户可以通过PC、Pad、Phone、Web等任意一个client聊天。
八、解决方案
1、一个应用程序,多类型账户可同时登陆。
类似于Live Mail,没个账户只能和本账户下的朋友聊天。
有些国外的软件(Palringo、Trillian)以实现该功能.
2、一个应用程序,一个账户可以和其他类型的账户好友聊天。
XMPP IM 与非XMPP 的其他IM互联互通方法: 如果对方不是XMPP 体系中的用户, 就要在企业IM服务器上架设协议转换网关。在XMPP 的IM服务器上架设IM协议转换网关, 要遵守RFC3922 协议, 这个协议规定了XMPP 与公共显示和即时消息( CPIM)的映射。这里描述一下一个用户与MSN 用户的交流。在与MSN 用户交流之前, 企业IM用户首先设置一个MSN 用户到XMPP—MSN 协议转换网关上( 告诉MSN 的用户与密码给网关) , 现在网关就可以用这个MSN账号与MSN 系统进行交流了。绑定了MSN 用户的企业IM用户登录企业IM服务器后, 协议转换网关把MSN 账号的好友的MSN 账号返回给用户, 并在里面做了映射, 映射到了本地XMPP 账号。现在用户可以跟与本地XMPP 用户一样, 与MSN 账号的用户进行交流了。
九、全文概要图
本文章参考了许多网络的资料,忘了文章链接。在这先向他们道个歉。
http://www.cnblogs.com/luxiaofeng54/archive/2011/03/14/1984026.html