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