有人可以提供我需要使用socket.io-redis的示例情况吗?

时间:2016-04-27 18:24:12

标签: node.js redis socket.io

来自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);

2 个答案:

答案 0 :(得分:4)

如果您有一组服务器并希望与连接到不同实例的客户端通信,那么您需要一个公共存储 - 就在您使用Redis时。

您还提到了io-emitter,这是其他进程向您的客户发布消息的一种方式。例如,如果工作人员需要向客户端发送消息,则可以使用io-emitter。 Redis是跨不同进程/服务器共享消息的常用粘合剂。

答案 1 :(得分:1)

仅当您希望将解决方案扩展到多个解决方案或节点流程时,才需要该模块。通过redis适配器,多个服务器可以向其他客户端广播。

基本上,当您有两台服务器时,每台服务器都运行自己的服务器。服务器A有三个客户端。服务器B有两个不同的客户端。这两个服务器不共享任何客户端信息,因此您无法向所有用户消息广播。适配器使您能够将这些不同的服务器连接成一个(使用redis),因此您可以向所有用户广播。

关于socket.io和redis http://www.slideshare.net/YorkTsai/jsdc2013-28389880的详细介绍。