问题:即时通信的基础模型?
- 简单长连接模式
- 技术:TCP/IP、UDP、WebSocket、MQTT等
- 节省流量长连接模式:
- 技术:UDP、压缩、自定义应用程序协议
问题:即时通信的难点有哪些?
- 计算
- 信息加密与解密
- 高性能压缩算法
- IO的多路复用
- 通讯成本
- 压缩成本
- 瞬时带宽问题
- 内存
- 维护连接成本高
- 维护socket需及时回收,不然易导致内存泄漏
- 通信的信息(最核心问题)
- 信息的顺序
- 离线的消息
问题:如何确定信息的顺序?
- 全局自增ID
- ID采用雪花模型。
- 客户端保留一个ID,客户端带上ID发送同步请求给服务端,服务端根据最新的ID给客户端返回差值的信息,客户端同步信息后更新ID。
问题:如何解决服务器扩容困难问题?
- 用户的自增ID采用内存数据库存储(定期持久化)
- 服务器每次申请一大批自增ID
问题:即时通信的架构设计是怎样的?
- 客户端从目录服务集群中获取到自己需要访问的自增ID节点。
- 访问自增ID节点进行数据同步,该节点如果一直可用,就会跳过第一步,之后一直访问该节点。
问题:对比基础模型,上述这种设计的优势有哪些?
- 脱离长连接模式,节省内存,客户端只需要定期向服务器同步信息即可。
- 只需要根据uid+序列号简历索引
- 离线模式下,同步数据只需要确认客户端的ID与服务端的ID就能获取缺少的信息。