IM协议选型

确定协议

Posted by CDz on May 4, 2020
  • 确定通信协议
    • 什么是通信协议?
      • 即时通讯本质上是要维护很多个长连接,在维护长连接的过程中,需要很多工作要做,客户端和服务器,比如
        • 长连接保活
        • 消息发送的可达性
        • 实时性
      • 通信协议就是解决这个问题的
        • 所以协议定义好了之后,就有一套标准的实现,对应的客户端就有一套标准的实现。这也是我一开始疑惑的地方,不知道开始讨论的协议是什么意思
          • 关键点:要搞秦楚TPC、websocket、XMPP、mqtt这些之间的关系是什么
      • 选型备案
        • XMPP
          • 优点
            • 有现成的客户端与服务端IM实现
          • 缺点
            • 协议太老,基于XML实现,流量与耗电量上都很大
            • 开源的server并发性支持不够
        • mqtt
          • 优点
            • 传输数据定义非常简洁,冗余数据量小
            • 消息可靠性上设计之初就有保障
              • 不同档位的消息可达性设置
          • 缺点
            • 没有非常可靠的server实现
            • 没有现成的基于mqtt的IM开发,只能作为一个长连接服务器,其他相关IM业务都需要自己实现
            • 集群困难
            • 自己实现上非常困难
        • websocket自定义
          • 优点
            • 自定义,业务结构熟悉,拓展新好
            • 消息流量消耗少
          • 缺点
            • 坑比较多
            • 很多时候需要去借鉴MQTT协议
              • 存活方面
              • 消息投递方面
            • 工作量大
            • 据说websocket比较容易攻击
        • tcp自定义
          • 优点
            • 更底层的实现,类似websocket优点
          • 缺点
            • 技能要求高
            • 周期长
  • 确定MQTT协议
    • MQTT选型
      • 总结:
        • 将MQTT作为插件使用,存储业务以及IM业务都在此之外做
        • 在MQTT基础上改造成符合IM业务的server
      • 结论:
        • 使用mqtt作为长连接服务器
          • 选型锁定
            • EMQ√
            • hiveMQ
        • 火峰开源基于Mqtt项目的IM
          • 研究其IM业务
          • 剥离MQTT模块,使用我们自己的MQTT服务器