- 通讯协议 对外使用ws 后续支持tcp,kcp, 对内使用 grpc
- 通讯数据协议 使用protobuf
- 采用etcd进行服务发现及配置下发
- 采用redis来存储离线消息
- mysql用来存储账号体系
- 采用nsq来做一些异步任务
- 采用logkit做日志收集,kafka做日志传输,elasticsearch做日志存储
- docker部署
- api服务 主要提供http请求,获取用户信息,登录注册,提供agent列表地址,
- agent服务 网关,提供socket链接 前期先支持ws即可,转发用户的数据
- chat服务 聊天服务,用户聊天的数据交换服
- usercneter服务 用户中心, 权限校验,用户信息管理,比如在线状态
- 从api服务登录,获取token,和agent地址
- 连接agent,agent通过token请求usercenter进行权限校验.校验通过则获取chat服务id,从etcd获取chat地址, 建立chat的转发通道. 若权限校验失败则断开连接返回特定状态码
- chat服与agent建立通道后,需要告诉客户端聊天服务准备就绪,并且通知usercenter更新用户信息状态. 最后处理用户发过来的信息
- 互体机制,分为三种客户端, pc,mobile,web,,, 每种客户端同时只能有一个客户端在线,新踢旧, 用户的聊天信息三端同步,这个由usercenter控制
- 群聊机制,群聊成员地址由usercenter存储,chat在收到群聊信息之后,需要带着群聊id向usercenter获取所有在线用户,并且存储离线消息
- 离线消息,服务端需要存储每个消息是否已读,离线时间,可配置
- 每个服务的配置文件都由etcd获取,服务暴露的地址也由etcd提供 也就是服务发现功能
- 使用谷歌爸爸最新一代跨平台框架 flutter 开发。
- 前期就简单的加加好友,单人聊天,开个群聊,只发送文字这样纸。
- 使用ws、http进行数据传递,使用设备码和手机号登陆,不麻烦的话再支持第三方登陆。
https://docs.google.com/document/d/1Cm3wB8Fvoc47MIjLHOuxT_ISAqLtDzApN7Pu3n1qxe8/edit
https://trello.com/b/n079Ow6n/chat
例子
cd agent
govendor init
govendor add +external
注意: vendor 需要屏蔽,,不能提交git