这是一个创建于 1419 天前的主题,其中的信息可能已经有所发展或是发生改变。
类 IM 系统, 目前用户不多, 所以系统比较简单, 系统的所有消息会广播到所有 websocket 服务器, 用户连接到任一 websocket 服务器, 订阅他需要的频道和消息即可.
现在可以预见到消息会变多一个数量级, 每个 websocket 服务器接收整个系统的所有消息不合适了, 应该仅接收此服务器连接的用户所订阅的消息.
所以系统需要对消费者(websocket), 生产者(产生消息)进行一些管理, 至少要对消息进行过滤 /路由, 有什么可行的成熟方案吗?
4 条回复 • 2021-04-22 09:44:25 +08:00
 |
|
1
aec4d 2021-04-21 23:07:05 +08:00 via iPhone
可以试试 socketio 配合消息中间件
|
 |
|
2
psx2019 2021-04-22 00:07:18 +08:00
不想写扩散的话,那就模拟服务发现的机制做一个用户路由发现,维护一个在线用户的 session 缓存,里面维护了 session 对应的路由服务器信息,发送的时候根据这个缓存值进行路由,但是需要配合 ack 机制或者其他机制保证消息真的被接受到了。否则应该保存到离线消息表里面等待下次上线拉取消息。
|
 |
|
3
xstmjh 2021-04-22 00:10:41 +08:00
一楼正解
|
 |
|
4
lldld 2021-04-22 09:44:25 +08:00
@ aec4d @ psx2019 感谢. 我自己的方案是会用 kafka. 只是毕竟自己要实现消息的过滤和路由等, 想找找看有没有开源的成熟方案.
|