当前位置: 首页 > 面试题库 >

在socket.io中使用RedisStore的示例

孟树
2023-03-14
问题内容

我正在尝试在多个进程和/或服务器上扩展一个简单的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有何不同。有人可以向我解释吗?

不同之处在于,当使用default时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会话不能在工作人员之间共享。如果您使用任何长轮询传输方式,则可能意味着问题。



 类似资料:
  • 问题内容: 大家好,感谢您的宝贵时间和帮助。 我需要一个使用socket.io-redis的简单示例,请提供注释。我阅读了文档,但听不懂。谢谢, 问题答案: socket.io-redis文档没有提到您实际上需要运行redis服务器,因此您可能已经忘记了这一点。socket.io- redis插件使用redis服务器的pub / sub客户端连接多个socket.io实例。 从https://re

  • 到目前为止,一切都很好。Chrome、Firefox和Opera都使用原生的websockets,所有消息都能正确接收。 但是,Internet Explorer和IcewaSel正在使用行为有点奇怪的XHR-polling回退...客户机只接收两条消息,在此之后客户机可以向服务器发送消息,但不会向客户机发送消息。从XHR-client发送的消息被正确接收和处理-每个websocket客户机都得到

  • 本文向大家介绍node.js中的Socket.IO使用实例,包括了node.js中的Socket.IO使用实例的使用技巧和注意事项,需要的朋友参考一下 1. 简介 首先是Socket.IO的官方网站:http://socket.io 官网非常简洁,甚至没有API文档,只有一个简单的“How to use”可以参考。因为Socket.IO就跟官网一样简洁好用易上手。 那么Socket.IO到底是什么

  • 我试图提供静态文件的ngin x 1.6和代理套接字流量来自Node.js网络服务器与socket.io。 这是nginx.conf的相关部分: 它直接在浏览器和 Node.js 之间完美运行,但使用 nginx 1.6 代理时 socket.io 时间太长。握手协议需要太多时间,但如果不间断,它最终会在几分钟后开始工作。 nginx的静态文件交付工作得很好。 会有什么问题呢? 更新: 我分析了一

  • 问题内容: 有什么方法可以将Socket.IO http://socket.io/与Django 一起使用? 问题答案: 你当然可以! Django本身并不异步,因此你必须与普通的django服务器并行使用Socket.IO服务器,node.js始终不是一个不错的选择,但也存在使用纯Python编写的其他服务器。

  • 问题内容: 我正在尝试使用我的SSL证书运行socket.io,但是它将无法连接。 我基于聊天示例创建代码: 如果我删除SSL代码,它运行正常,但是与此同时,我收到了一个请求,请求http://domain.com/socket.io/1/?t=1309967919512 请注意,它没有尝试使用https,这会导致它失败。 我正在测试chrome,因为它是该应用程序的目标浏览器。 抱歉,这是一个简