【XMPP】基于XMPP的即时通讯解决方案
什么是XMPP
介绍XMPP之前,先来看看GTalk。
GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN。
从技术角度来说,GTalk与QQ和MSN的差异是使用了不同的通讯协议,QQ使用了自己的私有协议(未公开),MSN也使用了自己的私有协议。而GTalk使用了XMPP(Extensible Messageing and Presence Protocol,可扩展消息与存在协议),这种通讯协议是一种公开的协议,有很多IM都使用了XMPP。
XMPP是一种基于XML的协议,它继承了XML的灵活性和可扩展性。因此,基于XMPP的应用也同样具有超强的灵活性和可扩展性。
- 经过扩展后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。
- 而且,XMPP包含了针对服务器端的软件协议,使之能与另一端进行通话,这使得开发者更容易建立客户应用程序或给一个系统添加功能。
开发背景
国际背景
随着Internet技术的高速发展,即时通信已经成为一种广泛使用的通信方式。
1996年Mirabilis公司推出了世界上第一个即时通信系统ICQ,不到10年间,即时通信(Instant Messaging,简称IM)以发展成为了最流行的网络应用之一。
特别是近几年的迅速发展,即时通信的功能日益丰富,不再是个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、音乐、电视、游戏、电子商务等为一体的综合化信息平台。
国内背景
目前国内外及时通信软件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的,甚 至连中国移动都力推飞信,希望分得一杯羹。
然而这些即时通讯不能实现互联互通,限制了用户的扩展。
为什么选择XMPP协议
虽然现在即时通信软件有很多,但是它们之间不能互联互通也阻碍了及时通信用户的继续扩展。
因此,在现阶段的各种即时通信服务,没有统一的标准,无法实现互联互通,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互通。
有了这个协议之后,使用任何一个组织或者个人提供的即使通信服务,都能够无障碍的与其他的及时通信服务的用户进行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP协议的即使通信软件。
目前IM即时通信有四种协议:
- 即时信息和空间协议(IMPP)
- 空间和即时信息协议(PRIM)
- 针对即时通讯和空间平衡扩充的进程开始协议SIP
- 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的基础部分已经在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协议介绍
协议概述
XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。
因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol , XMPP) 是一种基于可扩展标记语言(eXtensible Markup Language, XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML 结构化数据中, 使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。
XMPP 协议已被批准为互联网即时通信协议标准。
协议的网络架构
XMPP中定义了三个角色,客户端,服务器,网关。
- 通信能够在这三者的任意两个之间双向发生。
- 服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
- 网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。
基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
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技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。
协议缺点
- 数据负载太重:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
- 没有二进制数据:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
Xmpp提供电子名片协议
vCard是一种现存的、广泛使用的,用户个人信息存储的标准,有点像是电子名片。
基础的功能是存储和获取用户的电子身份,该信息是用XML表示的,数据的存储取决于所有现存的Jabber服务器的实现。
系统特点
客户机/服务器通信模式、分布式网络、简单的客户端、XML的数据格式。
服务器端介绍
什么是Openfire
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器.
Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.
为什么使用Openfire
- Openfire为Java开源项目
- 采用开放的XMPP协议
- 有多种针对不通系统的版本
- 使用Socket通讯
- 单台服务器可支持上万并发用户,搭建分布式云服务器可轻松提供大量并发用户。
- Socket长连接
- 服务器稳定
- 提供接口,可自己开发插件
Windows下搭建服务器
JDK1.6 + Openfire For Windows + Mysql5.5 + Tomcat6
Linux下搭建服务器
JDK1.6 + Openfire For Linux + Mysql5.5 + Tomcat6
环境搭建
安装JDK
下载官网的JDk,并且正常安装,待安装完成后设置环境变量。
安装OpenFire
下载Openfire,并正常默认安装。
安装Mysql
下载安装Mysql,指定Mysql的用户名和密码,以及数据库使用的编码。确定是否允许远程访问该数据库。
安装Apach Tomcat
下载Apach基金会下的Tomcat服务器,并且解压安装。
配置环境
登陆Openfire服务器控制台,设置相关的信息。如:端口,插件等。
并将项目部署到Apach tomcat中。
安装项目
- ForAndroid:从Tomcat中下载android的项目XmppClientForAndroid.apk,并在手机中安装。
- ForPc:从Tomcat中下载Pc的项目 Spark.exe,并在手机中安装。
- ForWeb:打开Tomcat中的项目,直接运行登陆。
点击运行
设置服务器地址
ForAndroid、ForPc、ForWeb 都提供了个服务器地址设置的地方。默认Openfire的端口为5222.(除,Silverlight 的端口必须为 4502-4532)
注册用户
可以在服务器端直接注册用户,也可以在客户端注册用户。
进行相对应的操作
相对应的即时通讯方面的操作。
环境搭建请参考:http://www.cnblogs.com/charley_yang/archive/2011/03/27/1997052.html
文章参考
http://baike.baidu.com/link?url=uPBLWsmv5AL8jWF3vQ4Hhcif-YkhMZB0xfxNfWA56Vgdig0bI9gQudZUICpWkDJb
http://www.cnblogs.com/charley_yang/category/277938.html
http://www.cnblogs.com/luxiaofeng54/archive/2011/03/14/1984026.html
【XMPP】基于XMPP的即时通讯解决方案的更多相关文章
- Openfire XMPP Smack RTC IM 即时通讯 聊天 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 基于openfire+smack即时通讯instant message开发
前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...
- easy-im:一款基于netty的即时通讯系统
介绍 easy-im是面向开发者的一款轻量级.开箱即用的即时通讯系统,帮助开发者快速搭建消息推送等功能. 基于easy-im,你可以快速实现以下功能: + 聊天软件 + IoT消息推送 基本用法 项目 ...
- iOS之即时通讯相关理解
Socket: 1>Socket又称"套接字" 2>网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 3>应用程序通常通 ...
- iOS - IM 即时通讯
1.即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息.文件.语音与视频交流. 即时通讯在开发中使用的场景 ...
- RDIFramework.NET敏捷开发框架通过SignalR技术整合即时通讯(IM)
1.引言 即时通讯(IM)是RDIFramework.NET敏捷开发框架全新提供的一个基于Web的即时通讯.内部聊天沟通的工具.界面美观大方对于框架内部进行消息的沟通非常方便.基于RDIFramewo ...
- 通过SignalR技术整合即时通讯(IM)在.NET中应用落地
1.引言 即时通讯(IM)是RDIFramework.NET敏捷开发框架全新提供的一个基于Web的即时通讯.内部聊天沟通的工具.界面美观大方对于框架内部进行消息的沟通非常方便.基于RDIFramewo ...
- 基于XMPP协议的手机多方多端即时通讯方案
一.开发背景 1.国际背景 随着Internet技术的高速发展,即时通信已经成为一种广泛使用的通信方式.1996年Mirabilis公司推出了世界上第一个即时通信系统ICQ,不到10年间,即时通信(I ...
- Android基于xmpp的即时通讯应用
xmpp是一个通信协议.因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议.Android上最常用的组合asmack +openfire.Asmack是smack的android版, ...
随机推荐
- oracle中tables和views的区别
tables存储的行和列的数据,可以做任何操作 views存储的是算法,是虚拟的数据
- def 函数的不定长函数
*args 不定长函数传值可直接传,也可以拆包传,参数默认为元组: 参数为字典的时候:
- Burp Suite之Scaner模块(三)
Burp Suite之Scaner模块(三) Scaner模块配置详解 Scan Queue Active Scanning(主动扫描)过程通常包括发送大量请求到服务器为所扫描的每个基本的请求,这可能 ...
- 树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序
一.前言 将做好的Python软件运行在树莓派上时,不想公开源码,就需要对文件进行封装(或称打包),本文主要介绍使用pyinstaller封装Python代码为可执行程序. Python是一个脚本语言 ...
- hashCode方法的作用?
(1)前言,想要明白hashCode的作用,你必须要先知道Java中的集合. Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复 ...
- SpringBoot-@PathVariable
URL变量 在上一个博客中,学习了如何在@Controller中创建@RequestMapping(或者响应的简写)来处理不同的URL请求.但是在Web应用中URL通常不是一成不变的,例如微博两个不同 ...
- bzoj5312: 冒险(势能均摊线段树)
题目链接 BZOJ5312: 冒险 题解 如果一次操作对区间& 和 区间| 产生的影响是相同的,那么该操作对整个区间的影响都是相同的 对于每次操作,在某些位上的值,对于整个区间影响是相同的,对 ...
- GitHub Desktop的简单使用
- SimpleDateFormat 格式化参数说明
字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周数 Number 27 W ...
- reveal查看任意APP
链接: 使用Reveal查看任意App的技巧 使用Reveal查看任意App最省步骤的技巧 如何利用Reveal神器查看各大APP UI搭建层级 使用Reveal查看别人app的UI组成 Reveal ...