美文网首页
MQTT vs. XMPP

MQTT vs. XMPP

作者: Shawn_xiaoyu | 来源:发表于2018-07-23 00:53 被阅读0次

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 应用上,XMPP 是要退出历史舞台了么?
  • 我的 IM App 到底该选用 MQTT 吗?

为了回答上面的两个问题,我们需要逐一考虑使用 MQTT 实现常见 IM 需求的方式,并分析其优缺点。
(现在很多人的技术选择已经很简单了 -- 什么流行用什么)

性能

对于移动设备上的 IM App 来说,电量损耗是一个需要认真对待的问题,在这方面,固定头部仅仅消耗 2 个字节的 MQTT 协议显然有着巨大优势。当然前提是设计良好的主题格式,消息体格式和长度。
使用 MQTT 搭配合适的二进制格式的消息体,让聊天信息交换和处理非常轻量。

IM 功能

XMPP 在 IM 的各个功能上的定义非常完善,而 MQTT 需要在基础协议之上自行实现。

认证

  • XMPP: 通过 SASL RFC4422
  • MQTT: 协议未定义,通常的实现方式是定制 CONNECT 报文中的 username 和 password 字段,因为 MQTT 只提供了这两个字段可以自行发挥。比如定义 username 为 {"uname": "Shawn", "dtype": "mobile"}, password 为 JWT。(MQTT 5.0 里添加了 AUTH 消息类型)。然后在 MQTT 后台处理 CONNECT 消息进行认证。
    在设计的时候是需要仔细考虑的部分。

多设备

  • XMPP: 核心协议里有定义,通过 resource 实现。比如用户 shawn@emqx.io 的两个设备分别是: shawn@emqx.io/pc, shawn@emqx.io/mobile。
  • MQTT: 协议未定义。因为 MQTT 协议里,唯一标识设备使用的是 Client ID,所以设计的难点在于,如何定义 Client ID 的格式,并且能够跟 IM 需求里的 username 做对应,并且实现多终端同步。常见的做法是:
    • 限制用户名里不能有特殊字符 '@', '/';
    • 对于 ClientID 的格式为 'username@device', 比如用户 "shawn" 的两个 ClientID: "shawn@pc", "shawn@mobile"。
    • 对于用户 shawn 的这两个终端,通过订阅相同的主题来同步所有别人发来的聊天消息。比如都订阅主题:'p2p/talk/shawn'。并且向外发送消息时需要将消息复制到主题 'p2p/talk/shawn' 以同步发出的消息,这样做时,还需要忽略自己发出的同步消息。

状态显示

  • XMPP: XMPP Presence RFC 3921.
  • MQTT: 协议未定义,可以通过订阅对方状态来实现:比如用户

未完成 2018年07月23日00:54:15

相关文章

  • MQTT vs. XMPP

    XMPP 是老牌的即时聊天协议,像 Google Hangouts, WhatsApp Messenger 等即时...

  • A Simply IM Prototype

    即时通讯也就是 IM,QQ,微信等的总称。即时通讯协议有XMPP,MQTT等。XMPP协议在 IM 上生态较为完善...

  • MQTT与XMPP的知识点

    这里主要大致讲解一下mqtt与xmpp的知识归纳点,以及俩者的一些区别。不喜勿喷。 1:MQTT(消息队列遥测传输...

  • 消息推送oneToOne

    今天我将为大家介绍常用的几种消息推送:JMS,MQTT,XMPP,WebSocket,AMQP,友盟,环信。 首先...

  • 2017-12-25

    XMPP实时监控系统,MQTT实时监控系统,mosoquitto服务器监视系统,继电器原理:弱电控制强电;

  • 每日总结-第十三天-端到端加密

    端到端加密-名词解释 基于发布/订阅模式的物联网通信协议MQTT、AMQP、XMPP:基于发布/订阅模式,发布/订...

  • iOS XMPP和MQTT优缺点

    没有一蹴而就的天才,只有不断点亮天赋的勤者

  • MQTT协议学习与在Java(Android通用)中的使用

    写在前面 最近有需求要了解一下各个推送的协议,目前了解到实现推送的三个主要方式:MQTT、XMPP和Google ...

  • WebRTC总结

    最近分别使用Mqtt和Xmpp作为WebRTC的信令实现了音视频通话,一点小小的总结! 使用WebRTC做音视频通...

  • xmpp协议初识

    XMPP简介 XMPP协议简介 XMPP协议(Extensible Messaging and PresenceP...

网友评论

      本文标题:MQTT vs. XMPP

      本文链接:https://www.haomeiwen.com/subject/ayvrmftx.html