参考项目
https://github.com/crossoverJie/cim
使用的Netty-WebSocket
轻量级、高性能的WebSocket框架:
https://github.com/YeautyYE/netty-websocket-spring-boot-starter
在spring-boot中使用Netty来开发WebSocket服务器,并像spring-websocket的注解开发一样简单,很贴心,还有中文markdown。
框架
- Netty WebSocket通信协议
- nacos服务发现、服务治理、配置中心
- gateway网关、服务负载均衡、服务路由
- Kafka消息订阅发布、分布式消息队列 + Kafka-manager分布式队列监控
- Redis缓存 + Mysql持久化
- ElasticSearch 搜索引擎、日志存储、非关系型数据存储
- Logstash数据收集、转化、传输、加载 + DataX分布式ETL
- Kibana操作日志、系统日志、链路日志分析、基于ES的数据分析
通讯流程
- 客户端携带授权token向服务集群发起connect请求,请求会被网关转发到具体的某⼀个WebSocket节点中去。
- WebSocket服务针对connect进⾏鉴权,并且将该连接会话缓存在服务内,返回连接成功。
- 客户端定时像服务端发送WebSocket心跳ping请求,服务端返回ping报文。
- 客户端需要发送消息时,通过WebSocket发送报文。对应的WebSocket服务端接收到报文信息后,直接发布到消息队列的主题中。
- 所有的WebSocket服务均监听消息队列主题,收到主题消息后,根据busiCode类型、toUserId、groupId等寻找到对应的⽤户id。再通过⽤户id获取到该服务节点中的会话,通过该会话进⾏消息推送。
- 另外⼀组队列监听程序,负责持久化消息。
其他支撑接口
Rest服务提供客户端查询历史数据,es的查询接口