陌陌发展刚开始由于规模小,30-40W的连接数(包括Android后台长连接用户),也使用XMPP;由于XMPP的缺点:流量大(基于XML),不可靠(为传统固定网络设计,没有考虑WIFI/2G/3G/地铁/电梯等复杂网络场景),交互复杂(登陆需5-6次,尤其是TLS握手);XMPP丢消息的根本原因:服务端和客户端处于“半关闭”状态,客户端假连接状态,服务端有收不到回执;Server端连接层和逻辑层代码没有解耦分离,常常重启导致不可用。
消息中转:
连接层(Connector链接集群)
逻辑层(Logic逻辑集群)
通讯协议设计:
通讯协议:
采用私有通讯协议,目标:
Redis协议:
下面都是用Redis协议来描述逻辑
Read Redis Command
基于队列的消息协议
基于队列的交互
基于版本号的消息协议
基于版本号的交互
针对弱网络的优化协议
如何选择最优路线智能路由、连接策略:
多端口、双协议支持,应对移动网关代理的端口限制