XMPP协议介绍

XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的(也有例外,例如在两个客户端传输文件时).采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就比较简单,而且,当增加功能时,多数是在服务器端进行.XMPP中定义了三个角色,XMPP客户端,XMPP服务器、网关.通信能够在这三者的任意两个之间双向发生.服务器同时承担了客户端信息记录、连接管理和信息的路由功能.网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信)、MSN、ICQ等.基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 核心的XML流传输协议和基于XML流传输的即时通讯扩展应用,XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。

官网:http://xmpp.org/

中文网站:http://wiki.jabbercn.org/

工作原理:

(1)节点连接到服务器;
(2)服务器利用本地目录系统中的证书对其认证;
(3)节点指定目标地址,让服务器告知目标状态;
(4)服务器查找、连接并进行相互认证;

(5)节点之间进行交互;

XMPP中的几个重要概念:
JID:即Jabber ID。xmpp网络有一个或多个地址jid,如[email protected]/study 。
组成:节点、域、资源(带有资源的jid是完整jid,没有资源的jid是裸jid),其中节点和资源是可选的,域是必选的。jid的资源部分会标识一个特定的客户端xmpp链接,对于xmpp客户端来说,每个链接均被指派一个资源。
XMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。
客户端服或务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。
XML流:其中的stream标签就是所谓的XML Stream。
XML节:在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza
XMPP工作原理
(1)先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端一个接一个的发送XML Stanza给服务器。
(2)服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。(这个过程并不是一问一答的,任何时候都有可能从一方发信给另外一方。)
(3)通信的最后阶段</stream>关闭流,关闭TCP/IP连接。
XMPP是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接收的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。
XMPP环境:
1、服务器软件

服务器软件列表:http://xmpp.org/xmpp-software/servers/
用得最多的当是Openfire了。ejabberd也用的比较多。
关于Openfire的安装与配置,看下面的blog就可以了
http://blog.csdn.net/shimiso/article/details/8816558      Windows下
http://blog.csdn.net/jeepxiaozi/article/details/16357337       Mac下
2、客户端软件
客户端软件主要用来自己做开发测试时使用。
客户端软件列表:http://xmpp.org/xmpp-software/clients/
客户端使用Spark即可,登录时,先在服务器上多创建几个账号,然后直接登录其中一个,添加联系然即可进行聊天。
其他客户端软件参考Spark即可(最重要的是把JID输入正确)
参考下面文章:(仅供参考,没他写的那么复杂。第四步是另一回事,不用管)
http://www.cnblogs.com/top5/archive/2009/04/07/1431001.html

3、开发类库
Smack是一个用于和XMPP服务器通信的类库,由此可以实现即时通讯和聊天。 
非常简单易用,并且有十分强大的 API。只需三行代码就可以向用户发送文本消息: 
XMPPConnection connection = new XMPPConnection("jabber.org"); connection.login("mtucker", "password"); 
connection.createChat("[email protected]").sendMessage("Howdy!"); 
不像其它库那样强制您进行包级别的编码。Smack提供智能的更高级的构造,像 Chat和GroupChat类,让您进行高效的编程。不需用您熟悉XMPP XML格式,即使您熟悉 XML.  
提供简单的设计以进行通讯,Smack允许您在每个消息中设置任意数量的属性,包括java对象。 Apache许可下的开源类库,这意味着您可以将Smack整合进您的商业或非商业的应用中。
后续的代码示例也是用该类库。

使用文档参考:

1.smack开发文档

2.基于xmpp_openfire_smack开发之smack类库介绍和使用

参考:http://blog.csdn.net/xn4545945/article/details/38966557

你可能感兴趣的:(XMPP)