我目前正在创建一个水平可伸缩的socket.io服务器,如下所示:
LoadBalancer (nginx)
Proxy1 Proxy2 Proxy3 Proxy{N}
BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N}
代理使用粘性会话+群集,每个群集都有一个在核心上运行并由nginx代理负载平衡的socket.io服务器。
现在我的问题是,这些后端节点使用redis pubsub与代理进行通信,代理通过传输(websockets)处理所有通信。
当代理向请求发送到后端服务器时,它会知道请求它的用户以及用户所在的代理。我担心的是,当代理服务器由于某种原因而脱机时,我的后端节点上的任何挂起请求将无法在用户重新联机时到达用户,因为在服务器脱机时发送的消息。我可以实现什么来规避这个问题,并且在任何代理服务器脱机时基本上让消息排队,然后在重新启动时交付?
答案 0 :(得分:0)
Pubsub不会保留邮件。完全没有。为了使用Redis,您需要使用队列。例如,您可以使用列表操作的组合,生产者将它们推送到列表,客户端服务器使用BLPOP
或BRPOP
,具体取决于您添加它们的方式以及是否需要FIFO或LIFO中的消息序列。