Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 在socket.io中使用RedisStore的示例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在多个进程和/或服务器上扩展一个简单的socket.io应用程序。

Socket.io支持RedisStore,但我很困惑如何使用它。

我在看这个例子,
http://www.ranu.com.ar/post/50418940422/redisstore-and-rooms-with-socket-io

但我不明白如何使用RedisStore在该代码将是任何不同于使用MemoryStore。有人可以解释一下吗?

配置socket.io使用redisstore与创建自己的redis客户端和设置/获取您自己的数据之间有什么区别?

我是新的node.js,socket.io和redis所以请指出,如果我错过了一些明显的东西。

解决方法

不同之处在于,当使用认MemoryStore时,您在工作程序中发出的任何消息只会发送到连接到同一个工作程序的客户端,因为工作程序之间没有IPC。使用RedisStore,您的消息将发布到redis服务器,您的所有工作者都在订阅该服务器。因此,消息将被所有工人和所有连接的客户端拾取和广播。

我不是非常熟悉RedisStore,所以我不知道所有的差异。但是自己做这是一个完全有效的做法。在这种情况下,您可以将所有消息发布到redis服务器,并监听套接字处理程序中的消息。这可能会为你更多的工作,但你也将有更多的控制你如何设置它。我自己做了类似的事情:

// Publishing a message somewhere
var pub = redis.createClient();
pub.publish("messages",JSON.stringify({type: "foo",content: "bar"}));

// Socket handler
io.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会话不是工人之间共享。如果使用任何长轮询传输,这可能意味着问题。

大佬总结

以上是大佬教程为你收集整理的node.js – 在socket.io中使用RedisStore的示例全部内容,希望文章能够帮你解决node.js – 在socket.io中使用RedisStore的示例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: