一、开发背景1、国际背景随着Internet技术的高速发展,即时通信已经成为一种广泛使用的通信方式。1996年Mirabilis公司推出了世界上第一个即时通信系统ICQ,不到10年间,即时通信(InstantMessaging,简称IM)以发展成为了最流行的网络应用之一。特别是近几年的迅速发展,即时通信的功能日益丰富,它不再是个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、音乐、电视、游戏、电子商务等为一体的综合化信息平台。2、国内背景目前国内外及时通信软件IM(InstantMessenger)形势风起云涌,可谓战况空前,IM作为继Email和Web之后最主要的互联网基础应用之一,为商家必争之地。国内的形势由于QQ的垄断性优势明显,表面稍显平静,实则暗流涌动。目前来看,胖企鹅公司以压倒性优势占据了国内IM市场近八成份额,并且紧紧抓住低端市场,用户数量庞大,盈利丰厚。其他的IM微软MSN(WLM)、网易POPO、新浪UC、TOMSkype、GoogleGtalk等占有率较为惨烈,还有雅虎即时通、AIM、ICQ以及传闻中的BaiduIM和搜狐搜Q以及一些目前并不出名的如校内网的校内通,Lava-lava等等等等,凡在国内叫得上号的叫不上号的互联网企业,几乎没有不推IM的,甚至连中国移动都力推飞信,希望分得一杯羹。然而这些即时通讯不能实现互联互通,限制了用户的扩展。3、为什么选择XMPP协议虽然现在即时通信软件有很多,但是它们之间不能互联互通也阻碍了及时通信用户的继续扩展。因此,在现阶段的各种即使通信服务,没有统一的标准,无法实现互联互通的局面下,而XMPP(ExtensibleMessageandpresenceProtocol)协议的出现,实现了整个及时通信服务协议的互通。有了这个协议之后,使用任何一个组织或者个人提供的即使通信服务,都能够无障碍的与其他的及时通信服务的用户进行交流。例如google公司2005年推出的Googletalk就是一款基于XMPP协议的即使通信软件。目前IM即时通信有四种协议:1.即时信息和空间协议(IMPP)2.空间和即时信息协议(PRIM)3.针对即时通讯和空间平衡扩充的进程开始协议SIP4.XMPP协议:该协议的前身是Jabber,我们采取XMPP协议主来实现IM主要是考虑XMPP协议是以XML为基础的,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的,所以XMPP信息不仅可以是简单的文本,而且可以携带复杂的数据和各种格式的文件,也就是说XMPP协议不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流,目前支持XMPP协议的即时通讯工具有Gtalk、FaceBookIM、Twitter、网易POPO等等通讯工具,具有非常好的发展情景。正如任何事物都有其自身的发展规律一样,技术和产品的进步也有其自身的规律。从萌芽到混乱最终标准化,这是互联网产品的基本规律。IM跟其实发展自Email,跟Email有着很多共同点。让我们来对比一下Email目前的情况,或许会有些启示。Email现在已经被广泛应用,谁都不能质疑其互联网第二应用的地位(第一应用是Web)。Email之所以能广泛地被应用最关键的原因应该是Email有一套开放标准的协议规范(包括SMTP、POP、IMAP等),任何人都可以基于这些协议规范开放自己的Email产品,不管是Email服务器也好,Email收发客户端也罢还是现在颇为流行的Web形式的Email界面,它们都是基于同一套标准。在这套标准的框架下,各个Email相关厂商都各自占据产业链的相应位置,相互合作相互竞争,这才是一个百花齐放的健康竞争环境,而且这种健康竞争最终受益者还是广大用户。XMPP()由Jabber软件基金会开发,最早在Jabber上实现。Jabber项目由JeremieMiller在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一样孤芳自赏或者像DECNET协议一样被人遗忘。遥想当年DECNET和IBMToken-Ring也是多么意气风发羽扇纶巾啊!在XMPP被批准之前,世界上已经存在了数十种支持XMPP的服务器端和客户端以及数百万用户。嗅觉灵敏的Google作为开放源代码社区和开放标准的最大受益者,第一时间感受到了这种趋势,所以花重金将Gaim的作者挖去Google,于是就有了基于XMPP的Gtalk。开放的标准协议会导致产品的竞争更为健康和良性,整个产业链更为完善。当然产品之间的竞争唯一的趋势就是同质化,产品发展到后期比拼的只有服务。这一点在传统产业已经被完全验证,互联网产业也不能逃脱。至于到时用户是选Gtalk呢还是选POPO呢,就像用户现在选Gmail还是163的邮箱一样,可以各有所好。不过IM在扩展功能以及增值服务上还有非常大的竞争余地。二、Xmpp协议介绍1、Xmpp协议概述XMPP(ExtensibleMessagingandPresenceProtocol,前称Jabber[1])是一种以XML为基础的开放式实时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。可扩展消息处理现场协议(eXtensibleMessagingandPresenceProtocol,XMPP)是一种基于可扩展标记语言(eXtensibleMarkupLanguage,XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML结构化数据中,使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。XMPP协议已被批准为互联网即时通信协议标准。2、Xmpp协议内容XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。3、Xmpp协议优点开放—XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。标准—互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。而XMPP的技术规格已被定义在RFC3920及RFC3921。任何IM供应商在遵循XMPP协议下,都可与GoogleTalk实现连接。证实可用—第一个Jabber(现在XMPP)技术是JeremieMiller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作著,并有数以百万计的人们使用XMPP实时传讯软件。分布式—XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。安全—任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自带于核心XMPP技术规格中。可扩展—XML命名空间的威力可使任何人在核心协议的基础上建造客制化的功能;为了维持通透性,常见的扩展由XMPPStandardsFoundation。弹性佳—XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。多样性—用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。4、Xmpp协议缺点数据负载太重:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。没有二进制数据:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此,文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encryptedconversations)或图形图标(graphicicons)以嵌入式使用相同的方法。5、Xmpp提供电子名片协议vCard是一种现存的、广泛使用的,用户个人信息存储的标准,有点像是电子名片。基础的功能是存储和获取用户的电子身份,该信息是用XML表示的,数据的存储取决于所有现存的Jabber服务器的实现。6、XMPP系统特点客户机/服务器通信模式、分布式网络、简单的客户端、XML的数据格式。三、服务器端介绍1、什么是OpenfireOpenfire采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器.Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.2、为什么使用OpenfireA、Openfire为Java开源项目B、采用开放的XMPP协议C、有多种针对不通系统的版本D、使用Socket通讯E、单台服务器可支持上万并发用户,搭建分布式云服务器可轻松提供大量并发用户。F、Socket长连接G、服务器稳定H、提供接口,可自己开发插件3、Windows下搭建服务器JDK1.6+OpenfireForWindows+Mysql5.5+Tomcat64、Linux下搭建服务器JDK1.6+OpenfireForLinux+Mysql5.5+Tomcat65、Mac下搭建服务器四、客户端介绍1、手机客户端A、ForAndroidClient手机登录界面手机IM联系人列表手机用户与PC客户端用户聊天手机用户与Web端用户聊天B、ForMobileClientC、ForIphoneClientD、ForSymbianE、ForWp72、Pc客户端A、SparkForJava(OpenSource)PC端用户登录界面PC端IM联系人界面列表PC端用户与手机端用户聊天界面PC端用户与Web端用户聊天B、SparkForC#(OpenSource)2、Web客户端A、RIA(FlexAndSilverlight)B、Html5C、Web2.0Web端登录Web端与PC聊天Web端与手机端聊天五、环境搭建1、安装JDK下载官网的JDk,并且正常安装,待安装完成后设置环境变量。2、安装OpenFire下载Openfire,并正常默认