在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的新手,所以请指出我是否漏掉了一些明显的东西。
但我不明白在代码中使用RedisStore与使用MemoryStore有什么不同。 有人可以向我解释吗?
不同之处在于,在使用默认的MemoryStore
,您在工作人员中发出的任何消息只会发送给连接到同一个工作人员的客户端,因为工作人员之间没有IPC。 使用RedisStore
,您的消息将发布到您的所有工作人员正在订阅的redis服务器。 因此,该消息将被所有工作人员以及所有连接的客户端收集并广播。
配置socket.io以使用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会话不在工作人员之间共享。 如果您使用任何长轮询传输,这可能意味着问题。
我建立了一个小型github项目来使用redis作为数据存储。
现在你可以运行多个socket.io服务器进程。
https://github.com/markap/socket.io-scale
配置socket.io以使用redisstore与创建自己的redis客户端并设置/获取自己的数据有什么不同?
不同之处在于,当您使用'RedisStore'时,socket.io本身会将套接字心跳和会话信息保存到Redis中,并且如果使用具有node.js的群集,则用户客户端可以工作。
如果没有redis,客户端可能会在下次更改node.js进程,所以会话将会丢失。
链接地址: http://www.djcxy.com/p/63663.html上一篇: Examples in using RedisStore in socket.io
下一篇: WrapPanel scrollbars