主要实现多功能聊天等功能,粗略分为三大模块:
聊天主界面模块、消息传递模块以及其它控制模块。聊天主界面模块:主要有展示聊天信息的界面区域、聊天信息输入框、发送按钮、私聊群聊界面等
消息传递模块:主要负责消息从客户端分发到服务端以及服务端消息消费存储的逻辑组件。消息分发部分会用到Kafka,RPC,ETCD等中间件。服务端离线消息缓存会用到Mongodb,全量消息存储会用到Mysql
其他控制模块:由应用栏的菜单键实现,用来控制各类功能。还包括部分工具类,例如文件(图片)选择,视频播放等。
服务端运行于Docker容器中,由访问层、逻辑层和存储层组成,好处在于各个层次能够依据业务特点专注于自己的事情,提高系统复用性,降低业务间的耦合。
(1)访问层:消息通过 Websocket 协议[11]接入,其他通过 http/https 协议接入,消息是高频及核心功能,通过双协议路由,体现了轻重分离的设计思想。
(2)逻辑层:通过 RPC 实现无状态逻辑服务[12],易于平行扩展,消息通过 MQ 解耦。(3)存储层:Redis [13]存储 token 和 seq;MongodDB 存储离线消息,并定时删除 14 天(可自行配置)前数据; Mysql 存储全量历史消息以及用户相关资料。数据分层存储,充分利用不同存储组件的特性。
(4)ETCD:服务注册和发现、以及分布式配置中心。