中易网

XMPP 协议适合用来做移动 IM 么

答案:1  悬赏:80  
解决时间 2021-03-13 03:25
XMPP 协议适合用来做移动 IM 么
最佳答案
XMPP(Extensible Messaging and Presence Protocol,前称Jabber)是一种以 XML 为基础的开放式实时通信协议,关于它的协议细节,网上已经有太多分析文章,我这里就不再赘述(而且,我也不可能比别人解释的更清楚)。简单来看这个协议,我们只需要知道:

  1,XMPP 的三种基本角色:客户端、服务器和网关,通信能够在这三者的任意两个之间双向发生。服务器端同时承担了客户端信息记录、连接管理和信息路由的功能。网关则承担着与异构系统的互联互通功能。在 RFC 3920 XMPP Core 中对 XMPP 网络结构有一个描述:

  C1----S1---S2—C3
  |

  C2----+--G1===FN1===FC1

  这里 C1,C2,C3 表示 XMPP 客户端;S1,S2 表示 XMPP 服务器;G1 表示网关,用来负责 XMPP 协议和外部聊天协议的转换;FN1 表示外部消息网络的服务器,FC1 表示外部网络客户端。

  大家可能会奇怪,这里为什么需要一个网关呢。这要从 XMPP 的来源说起。1996 年 Mirabilis 公司推出了世界上第一个即时通信系统 ICQ,不到 10 年,IM 就成了最流行的应用之一,MSN、Gtalk、雅虎即时通、AIM、Adium、Pidgin 等各种软件如雨后春笋般涌现,但是这些服务之间没有统一的标准,不能互联互通,XMPP 的设计目的就是为了实现整个及时通信服务协议的互通,让 IM 成为继 WEB 和 Email 之后的互联网第三大服务。

  2,XMPP 的消息格式。

  XMPP 协议的所有消息都是 XML 格式的,这是 XMPP 协议的另一个充满历史意味的选择,想当年 SOA / SOAP 一时间爆发起来,很多消息交换协议都采用了 XML 格式,但是不想 XML 很快就成了「大数据」的代名词。在 RFC 3920 XMPP Core 中定义了两个基础概念,XML Stream 和 XML Stanza,XML Stream 是两个节点之间进行数据交换的容器,它定义了顶层的XML节点 ;XML Stanza 则定义了实体消息的具体语义单元,在 XMPP 中定义了 3 个顶层消息:

  2.1 Presence
  用于确定用户的状态。消息结构举例如下(每个 XML 的 node 还会有很多其他 attribute,为了简单起见这里省略,下同):

  
  online

  


  2.2 Message
  用于在两个用户之间发送消息。消息结构举例如下:

  
  hello

  


  2.3 IQ
  信息/请求,是一个请求-响应机制,管理XMPP服务器上两个用户的转换,允许他们通过相应的XML格式进行查询和响应。

  

  


  3,XMPP 的交互流程。

  XMPP 通过 TCP 传输了什么内容?在 QQ 里面,消息是使用二进制形式发送的,在 MSN 里面是采用纯文本指令加参数加换行符的形式发送的,而 XMPP 传输的即时通讯指令与他们相仿,只是协议的形式变成了 XML 格式的纯文本,这让解析更容易,方便了开发和查错,但是也带来了数据负载过重的缺点,而被人广为诟病。

  XMPP 聊天的过程如下:

  所有从一个 client 到另一个 client 的消息和数据都要经过 XMPP Server;
  client1 连接到Server;
  server 利用本地目录系统的证书对其认证;
  client1 指定 client2 目标地址,让 server 告知 client2 目标状态;
  server 查找,连接并进行互相认证;

  client1 和 client2 进行交互。

  XMPP 系统实测

  XMPP 协议的最主要的一点就是开放,不管是协议、客户端,还是 Server 端,都有成熟的实现方案。为了实际感受 XMPP 协议的聊天过程,我使用 asmack library + OpenFire 服务器搭建了一套完整的测试环境。

  OpenFire 采用 Java 开发,是一个基于 XMPP 协议 的开源的实时协作服务器,它的安装和使用都非常简单,自带有一个内置的存储数据库(当然,你也可以使用独立数据库如Mysql等),并利用 Web 进行管理。其他类似的开源系统还有很多,eJabber、Tigase 也经常被用到。但是根据我们之前的经验,这些开源系统能支持的并发连接数都不高,要是有超过10万的用户同时连上来,对它们来说就快达到单机的瓶颈了,这时候一般都需要水平拆分,但是拆分之后服务器之间的 session 同步负担会大幅加重,对于性能又带来不小的抵消。所以这些系统大都被拿来做研究和测试用,很少见到大规模在生产环境中使用的。
  最后测试下来看,我个人感觉是,对于移动互联网来说,省电、省流量是所有底层服务的一个关键技术指标,XMPP协议看起来已经落后移动互联网了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
卧室有蚰蜒和潮虫怎么办?
雄风不锈钢怎么去啊,有知道地址的么
庄子孟之是什么学派
大英县国土资源局在什么地方啊,我要过去处理
优步只有4星还能跑吗
豆丁专业儿童摄影江宁店地址在什么地方,想过
当年地震的时候,谁的老师先跑了
中国石油江圣加油站怎么去啊,有知道地址的么
海昕酒楼在哪里啊,我有事要去这个地方
小型ERP系统价格都是多少
多依河宾馆我想知道这个在什么地方
帝国ol:全面战争手游三星版
阜南县公益志愿者协会怎么去啊,有知道地址的
武垄镇野生动物保护管理站地址在什么地方,想
女孩子晚上自己9点多回家,
推荐资讯
有什么钓鱼节目比较好看?
请问谁有比屏幕录像专家更好的录像软件
北方手工水饺(海燕大厦东)地址在哪,我要去那
抚州市公安局临川分局派出所怎么去啊,有知道
陈上宋村在哪里啊,我有事要去这个地方
赤水市长沙镇中心小学地址在什么地方,想过去
一分利水果行这个地址在什么地方,我要处理点
400大卡等于多少热量?
嘿,老头。里白杨和张澜结局是什么
河水是从东向西流,还是从西向东流(洮河)
吸顶灯是靠什么吸附在天花板上的?能吸附在墙
“我要拉屎”英文怎么说
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?