当前位置: 首页 > 知识库问答 >
问题:

将redis pubsub消息转发到express中的特定Socket.io客户端

高恺
2023-03-14
js lang-js prettyprint-override">var redis = require('redis');
var server = require('http').createServer(app);
var io = require("socket.io")(server);

io.on('connection', function (socket) {

   socket.on('whatever_event', function() {
       socket.broadcast.to(mySocketID).emit('TEST', 'hello ' + mySocketID);
   }
}

var subscriber = redis.createClient();

subscriber.on('message', function (channel, redisMessage) {

// I want to send redisMessage to the websocket client
// Can I access to "socket" in io.on('connection' ...) ? 

});

共有1个答案

魏刚豪
2023-03-14

不久前,我用WebSockets做了类似的事情(如果我明白您想做什么的话)。实际上,我必须在Redis pub/sub(普通的OL'EventEmitter)和WebSocket之间创建一个进程内事件代理层。如果没有这一层,您将有大量不必要的连接开销,通过使用它,您可以限制Redis的打开连接数。

因此,subscriber.on节发送一个EventEmitter事件(youreventsobject.emit(/*...*/))。然后,在socket.io连接回调中,使用侦听器(youreventsobject.on(/*...*/))响应这些事件。当socket.io连接关闭时,您需要确保并清理这些EventEmitter监听器,这样就不会在关闭的套接字中出现错误。

以下是完整的文件和描述WebSockets问题/解决方案的文章。

 类似资料:
  • 问题内容: 向所有客户端发送消息效果很好,但是我想向特定的用户名发送消息。我的server.js文件看起来像。它的作用是在运行时,客户端代码将用户添加到对象用户名以及套接字对象中。并立即将单个消息返回给每个连接的客户端。 发出消息的部分 问题答案: 试试这个: socket.id由socket.io保存,并且包含客户端的唯一ID。您可以使用以下命令进行检查:

  • 在socket.io中,如果要将消息发送到特定的房间,通常在服务器端使用特定的语法:。 但是客户机(我指的是在浏览器中运行的socket.io相关代码)如何指示消息应该发送到特定的房间? 还是socket.io客户端库也为此目的提供了特定的语法? 编辑:澄清一下,我上面的建议似乎起作用了,我只是不确定是否有更好的解决方案。

  • 问题内容: 我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示: 但是无论是还是方法似乎都无法满足我的需求。 我发现一种可能的解决方案是,该方法将不发送消息的SessionId数组作为第二个参数,因此我可以将此时连接了所有SessionId的数组传递给服务器,除了那个我希望发送邮件,但是我觉得必须有一个更好的解决方案。 有任何想

  • 我想发送数据到一个特定的套接字ID。 在旧版本中,我们曾经能够做到这一点: 我将如何在Socket.io1.0中执行类似的操作?

  • 问题内容: 我从socket.io + node.js开始,我知道如何在本地发送消息和广播功能:-所有连接的客户端都收到相同的消息。 现在,我想知道如何向特定的客户端发送私人消息,我的意思是一个套接字,用于2个人之间的私人聊天(客户端到客户端流)。谢谢。 问题答案: 当用户连接时,它应使用唯一的用户名(例如电子邮件)向服务器发送消息。 一对用户名和套接字应存储在这样的对象中: 在客户端上,使用以下

  • 问题内容: 我是Go的新手,并且发现自己作为第一个项目使用套接字。这是一个多余的问题,但是我无法理解如何将Websocket更新发送到Go中的特定客户端(使用Gorilla)。 我要解决的主要问题是-使用websocket和搜索引擎(如ES / Lucene)建立预输入。我在搜索引擎上维护了一堆索引,并在其周围进行了Go包装。当我开始在Go中使用websockets时,几乎发现了所有展示广播机制的

  • 在文档的socket.io客户端套接字部分http://socket.io/docs/client-api/#io#socket指的是套接字文档,这意味着服务器套接字对象和客户端套接字对象是相同的。