来自socket.io docs [http://socket.io/docs/rooms-and-namespaces/#sending-messages-from-the-outside-world]我阅读了以下内容,但似乎无法将其连接到我脑海中的任何用例:
从外部世界发送消息在某些情况下,您可能需要 从外部向Socket.IO命名空间/房间中的套接字发出事件 你的Socket.IO进程的上下文。
有几种方法可以解决这个问题,比如实施你的问题 自己的频道将消息发送到流程中。
为了方便这个用例,我们创建了两个模块:
socket.io-redis socket.io-emitter
通过实施Redis适配器:
var io = require('socket.io')(3000); var redis = require('socket.io-redis'); io.adapter(redis({ host: 'localhost', port: 6379 })); you can then emit messages from any other process to any channel var io = require('socket.io-emitter')(); setInterval(function(){ io.emit('time', new Date); }, 5000);
答案 0 :(得分:4)
如果您有一组服务器并希望与连接到不同实例的客户端通信,那么您需要一个公共存储 - 就在您使用Redis时。
您还提到了io-emitter,这是其他进程向您的客户发布消息的一种方式。例如,如果工作人员需要向客户端发送消息,则可以使用io-emitter。 Redis是跨不同进程/服务器共享消息的常用粘合剂。
答案 1 :(得分:1)
仅当您希望将解决方案扩展到多个解决方案或节点流程时,才需要该模块。通过redis适配器,多个服务器可以向其他客户端广播。
基本上,当您有两台服务器时,每台服务器都运行自己的服务器。服务器A有三个客户端。服务器B有两个不同的客户端。这两个服务器不共享任何客户端信息,因此您无法向所有用户消息广播。适配器使您能够将这些不同的服务器连接成一个(使用redis),因此您可以向所有用户广播。
关于socket.io和redis http://www.slideshare.net/YorkTsai/jsdc2013-28389880的详细介绍。