[英]Forward redis pubsub message to specific socket.io client in express
在我的Express服务器中,我正在使用socket.io和Redis pubsub。 服务器订阅Redis消息通道,并在有人通过Redis发布新消息时将Redis消息转发到特定的Websocket客户端。
从我从socket.io和Redis文档中读取的内容中,我可以使用可变socket
将消息发送到特定客户端,然后调用socket.broadcast.to(mySocketID).emit
。
但是在以下代码中,如果我想向redis订阅者中的mySocketID
发送消息,该消息超出了io.on('connection')
的范围, io.on('connection')
怎么办?
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' ...) ? });
不久前,我对WebSockets做过类似的事情(如果我了解您要做什么)。 有效地,我必须在Redis Pub / Sub(纯EventImitter)和websocket之间创建一个进程内事件代理层。 没有此层,您将有很多不必要的连接开销,通过使用它,您可以限制到Redis的打开连接数。
因此, subscriber.on
部分发送一个EventEmitter事件( yourEventsObject.emit(/*...*/)
)。 然后,在socket.io连接回调中,您可以使用侦听器( yourEventsObject.on(/*...*/)
)响应这些事件。 当socket.io连接关闭时,您需要确定并清理这些EventEmitter侦听器,以便关闭套接字不会出错。
这是完整源代码的完整文件,以及描述websockets问题/解决方案的文章 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.