XMPP 是老牌的即时聊天协议,像 Google Hangouts, WhatsApp Messenger 等即时聊天程序都是基于 XMPP 的。
而 MQTT 是最近几年随着物联网行业的发展,才慢慢进入公众视线的,像 Facebook Messenger App 使用了 MQTT 协议。
MQTT 的特点在于报文小,协议简单,提供了三个 QoS 级别。这几个特性是专门为网络环境复杂的物联网(IoT)场景设计的。
XMPP 特点在于协议和扩展协议成熟,功能完善,专门为即时聊天(IM)场景设计。
两者无法直接比较优劣。就像老虎和狮子其实无法比较真实实力,因为一个踞卧在长白山,一个奔跑在非洲大草原,要较量怎么也得放到同一个战场。但问题是战场选在哪儿都不合适。放在草原是偏袒狮子,放在森林是偏袒老虎,放在动物园却都没了脾气,怎么也打不起来了。
对于这两个协议来说,首先 XMPP 依赖 XML 协议,所以放在 IoT 场景里过重,基本不合适,很少有人用。而另一方面虽然 MQTT 协议本身过于简单,放在实时聊天协议里的话,多数功能是要自己定制协议来实现的,但总归可以用。
按照这个道理,比较就只能放在 IM 领域才有真实意义。
做技术选择一直是程序员和设计者头痛的事情,放在 IM App 设计的初期,大概就归结为两个问题:
为了回答上面的两个问题,我们需要逐一考虑使用 MQTT 实现常见 IM 需求的方式,并分析其优缺点。
(现在很多人的技术选择已经很简单了 — 什么流行用什么)
对于移动设备上的 IM App 来说,电量损耗是一个需要认真对待的问题,在这方面,固定头部仅仅消耗 2 个字节的 MQTT 协议显然有着巨大优势。当然前提是设计良好的主题格式,消息体格式和长度。
使用 MQTT 搭配合适的二进制格式的消息体,让聊天信息交换和处理非常轻量。
XMPP 在 IM 的各个功能上的定义非常完善,而 MQTT 需要在基础协议之上自行实现。
AUTH
消息类型)。然后在 MQTT 后台处理 CONNECT 消息进行认证。resource
实现。比如用户 shawn@emqx.io 的两个设备分别是: shawn@emqx.io/pc, shawn@emqx.io/mobile。Client ID
,所以设计的难点在于,如何定义 Client ID 的格式,并且能够跟 IM 需求里的 username 做对应,并且实现多终端同步。常见的做法是:
'@'
, '/'
;作者:Shawn_xiaoyu
链接:https://www.jianshu.com/p/ca2c9e577e7a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。