但是我不明白在该代码中使用RedisStore与使用MemoryStore有何不同。有人可以向我解释吗?
不同之处在于,当使用default时
MemoryStore,您在工作线程中发出的任何消息都只会发送给连接到同一工作线程的客户端,因为工作线程之间没有IPC。使用
RedisStore,您的消息将被发布到Redis服务器,您的所有工作人员都将订阅该服务器。因此,该消息将被所有工作人员以及所有连接的客户端接收并广播。
另外,将socket.io配置为使用redisstore与创建自己的redis客户端并设置/获取自己的数据之间有什么区别?
我对并不是很熟悉
RedisStore,因此我不确定所有差异。但是,自己动手将是一种完全有效的做法。在这种情况下,您可以将所有消息发布到redis服务器,并在套接字处理程序中侦听消息。这可能为您带来更多工作,但您也将对设置方式有更多的控制权。我自己做了类似的事情:
// Publishing a message somewherevar pub = redis.createClient();pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));// Socket handlerio.sockets.on("connection", function(socket) { var sub = redis.createClient(); sub.subscribe("messages"); sub.on("message", function(channel, message) { socket.send(message); }); socket.on("disconnect", function() { sub.unsubscribe("messages"); sub.quit(); });});
这也意味着您必须自己进行更高级的消息路由,例如通过发布/订阅不同的渠道。使用
RedisStore,您可以使用socket.io通道(
io.sockets.of("channel").emit(...))免费获得该功能。
一个潜在的大缺点是socket.io会话不能在工作人员之间共享。如果您使用任何长轮询传输方式,则可能意味着问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)