io.adapter如何在引擎盖下工作?

Aha*_*ron 8 cluster-computing websocket node.js express socket.io

我正在研究由node.js + express + socket.io提供支持的1-1聊天室应用程序.我正在关注文章:Socket.IO - 房间和命名空间

在文章中,他们演示了如何启动io.adapter使用模块socket.io-redis:

var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 在文档中,他们提到了另外两个论点:pubClientsubClient.我应该提供吗?有什么不同?
  2. io.adapter的行为如何?例如,如果用户A连接到服务器A而用户B是服务器B,并且他们想要彼此"交谈".引擎盖下有什么?

谢谢.

Nop*_*pik 1

  1. 您不需要传递自己的 pubClient/subClient。如果您传递主机/端口,将为您创建它们。但是,如果您想自己创建它们,出于任何原因(例如您想调整重新连接超时),您可以创建这两个客户端并将其传递给适配器。

  2. 适配器在内部广播所有发出的信号。因此,它为您提供了集群功能。例如,假设您有聊天应用程序,并且负载均衡器后面有 3 个 Node.js 服务器(因此它们共享单个 URL)。我们还假设 6 个不同的浏览器连接到负载均衡器 URL,并且它们被路由到 3 个独立的 Node.js 进程,每个 Node.js 服务器有 2 个用户。如果客户端 #1 发送一条消息,node.js #1 将执行类似的操作io.to('chatroom').emit('msg from user #1')。如果没有适配器,两个服务器 #1 用户都将收到发出的信号,但其余 4 个用户则不会。但是,如果您使用适配器,剩余的 Node.js #2 和 Node.js #3 将收到发出已完成的信息,并将向其客户端发出相同的发出 - 并且所有 6 个用户都将收到初始消息。