一个websocket的长连接系统,可应用于不同的业务场景(弹幕聊天、PK对局等等)
- 整体思路【分而治之】
1.将连接层从业务层剥离,可以单独水平扩展。连接层只负责连接维护、业务层负责消息处理与中转。
2.连接层与业务层可以通过消息队列(redis/rabbitmq/zeromq)或者rpc(grpc/thrift)等通信,协议可选json和protobuf
3.连接层水平扩展,负载均衡将用户连接均摊至连接层各节点
4.业务层水平扩展,通过订阅不同消息渠道可以实现分服、分区、分业务。
5.连接层中通过接入业务策略,实现房间控制、用户匹配等场景
- 待确定问题
1.如何确定连接层单节点最大连接数(经验值200), 确保广播时第一条消息与最后一条消息延迟不超过300ms
2.连接层到业务层消息通道是瓶颈,在线人数增长后需要引入分布式消息队列。