我有两台服务器server-b
和socket.io
。
通常使用server-a
,两台服务器都使用redis适配器。然后,客户端可以连接到server-b
或server-a
。
现在的问题是:如果客户端连接到server-b
并发出消息。 io.emit('sendMessage',myMessage)
是否有选项可以获取消息?
客户端代码:
io.on('sendMessage',function(){
console.log('Server A got the message')
}
服务器 - 代码:
io.on('sendMessage',function(){
console.log('Server B got the message')
}
服务器 - 代码:
client
server-a
仅与server-a
相关联。 server-b
& server-b
正在使用相同的redis适配器。
问题是:当客户端发出消息时,Server-B
会得到它吗? (socket.io
仅连接到相同的redis)
我想做什么:我有几个服务器应该根据客户端请求执行操作。当客户端请求某些内容时,所有服务器都需要启动。我想与socket.io
一起做,并在客户端和服务器之间保持一个连接。
所有服务器都将使用 af;laskjdf;lkasjda123241234123
$sakdfja;lskfj12352135qadsfasfa
falskdfjqwr1351
##alskgja;lksjgklajs23523,
asdfa#####1217653asl123654fjaksj
asdkjf23s#q23asjfklj
asko3
从客户端获取相同的消息。
答案 0 :(得分:1)
如果您正在将redis适配器与所有服务器一起使用,那么当您执行以下操作时:
io.emit('sendMessage',myMessage)
从您的任何一台服务器,然后该消息将最终发送到连接到所有服务器的所有客户端。内部发生的是将消息发送到所有服务器正在侦听的redis通道。当每个服务器收到消息后,它们会向所有用户广播,但这些最后一步是由redis适配器和redis存储为您透明处理的。
因此,io.emit()
用于发送到所有连接的客户端(它使用所有服务器来执行广播)。它不用于直接向所有服务器广播相同的消息,以便他们可以手动处理该消息。
要发送到每个服务器,您可能使用自己的自定义redis发布/订阅频道消息,因为每个服务器已经连接到redis,这是redis擅长的。
或者,您可以指定一个主socket.io服务器,并让所有其他服务器使用socket.io连接到它。然后,任何服务器都可以要求中央服务器向所有其他服务器广播消息。