实时消息架构推送设计(Socket 实现)

服务端是Socket.io的集群,供客户端(Web、移动端)连接。集群后面是一个Redis服务器,保存集群中每个节点(我们称之为Cluster)连接的客户端ID。同时Redis里面为每一个Cluster分配了一个队列,保存推送到这个Cluster的消息。

当有消息从某个客户端发出后,所连接的Cluster从Redis里面获取这个消息的目标客户端ID(由于我们同时支持一对一私聊和群组,因此一条消息可能会被推送到多个客户端),然后把消息Push到每个Cluster的消息队列里面。

每一个Cluster都会以阻塞方式读取它所对应的消息队列,一旦发现有消息,就获取并且查看其目标客户端ID是不是连接在这个Cluster上。如果是,就通过Socket.io发送;如果不是就丢弃。然后继续阻塞读取,直到下一条消息到达。

对于Cluster间如何互通,也可以考虑使用Redis的Pub/Sub。如果没有特殊的场景,推荐用Socket.io自带的 GitHub - socketio/socket.io-redis: Adapter to enable broadcasting of events to multiple separate socket.io server nodes.



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值