gpt4 book ai didi

node.js - 在 socket.io 中使用 RedisStore 的示例

转载 作者:IT老高 更新时间:2023-10-28 22:00:29 28 4
gpt4 key购买 nike

我正在尝试跨多个进程和/或服务器扩展一个简单的 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 的新手,所以如果我遗漏了一些明显的东西,请指出。

最佳答案

but I don't understand how using RedisStore in that code would be any different from using MemoryStore. Can someone explain it to me?

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

Also what is difference between configuring socket.io to use redisstore vs. creating your own redis client and set/get your own data?

我对 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();
});
});

这也意味着您必须自己处理更高级的消息路由,例如通过发布/订阅不同的 channel 。使用 RedisStore,您可以通过使用 socket.io channel (io.sockets.of("channel").emit(...)) 免费获得该功能。

这样做的一个潜在大缺点是 socket.io session 不在工作人员之间共享。如果您使用任何长轮询传输,这可能意味着问题。

关于node.js - 在 socket.io 中使用 RedisStore 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267292/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com