对比其他常用协议
HTTP | XMPP | websocket | |
---|---|---|---|
协议层级 | 应用层 | 应用层 | 应用层 |
双工通信 | 否 | 是 | 是 |
数据传输 | 包含大量头信息的二进制 | xml流 | 可以使用轻量ProtoBuf |
占用带宽 | 大 | 大 | 小 |
XMPP协议
XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的(也有例外,例如在两个客户端传输文件时).采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就比较简单,而且,当增加功能时,多数是在服务器端进行.
XMPP中的角色:
XMPP服务的框架结构中定义了三个角色,XMPP客户端,XMPP服务器、网关.通信能够在这三者的任意两个之间双向发生.
- 服务器 同时承担了客户端信息记录、连接管理和信息的路由功能
- 网关 承担着与异构即时通信系统的互联互通
异构系统可以包括SMS(短信)、MSN、ICQ等.基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML.
XMPP通信的运作:
XMPP协议的传输是通过XML文件来传输的,并且不是类似于QQ的点对点通讯,而是客户端到服务器再到客户端的方式来实现,以上过程的一个简单的XMPP通讯流程可以如下:
- 首先,由客户端连接到服务器,客户端通过IO流发送一段XML文件,在文件中包含了自身的用户名和密码。
- 服务器端接收到客户端的XML文件,从中获取用户名和密码进行验证,如果验证成功,服务器会发送一个XML文件给客户端表明已经登录成功。
- 登陆成功后,客户端可以通过发送一个获取好友名单的XML文件,服务器会将当前用户的好友以XML文件传到客户端。
- 客户端选择一个好友,向其发送信息(其实是向服务器发送,服务器收到后会转发给对应的好友),好友收到。
XMPP的核心概念:
XMPP地址
一个实体在XMPP网络结构中被称为一个节点,它有唯一的标示符jabber identifier(JID),即实体地址,用来表示一个用户,但是也可以表示其他内容,例如一个聊天室.
一个有效的JID包括一系列元素:(1)域名(domain identifier);(2)节点(node identifier);(3)源(resource identifier).它的格式是node@domain/resource,node@domain,类似电子邮件的地址格式.domain用来表示接点不同的设备或位置,这个是可选的,例如a在Server1上注册了一个用户,用户名为doom,那么a的JID就是doom@serverl,在发送消息时,指明doom@serverl就可以了,resource可以不用指定,但a在登录到这个Server时,fl的JID可能是doom@serverl、exodus(如果a用Exodus软件登录),也可能是doom@serverl/psi(如果a用psi软件登录).资源只用来识别属于用户的位置或设备等,一个用户可以同时以多种资源与同一个XMPP服务器连接。
XMPP的总结:
XMPP就是用TCP传的是XML流。
有许多的IM系统,如 AOL IM、Yahoo IM、MSN IM还有我们熟悉的QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议,协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,人们经过了多次尝试:IETF 的对话初始协议(SIP)和即时通讯对话初始协议和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即时通讯协议(PRIM)及基于 XML 且开放的可扩展通讯和表示协议(XMPP)协议(常称为 Jabber 协议)。人们多次努力,试图统一各大主要 IM 供应商的标准(AOL、Yahoo 及 Microsoft),但无一成功,且每一种 IM 仍然继续使用自己所拥有的协议。
引用 https://www.2cto.com/net/201310/253795.html
引用观点 https://stackoverflow.com/questions/26549010/xmpp-vs-websocket