エクスプレスサーバでは、socket.ioとRedis pubsubを使用しています。 サーバーはRedisメッセージチャネルに加入し、誰かがRedis経由で新しいメッセージを発行すると、特定のWebSocketクライアントにRedisメッセージを転送します。エクスプレスで特定のsocket.ioクライアントにpubsubメッセージを転送します。
私がsocket.ioとRedisのドキュメントから読んだところから、可変部socket
を使用して特定のクライアントにメッセージを送信し、socket.broadcast.to(mySocketID).emit
を呼び出すことができます。
しかし、次のコードでは、io.on('connection')
の範囲外の、赤いサブスクライバ内のmySocketID
にメッセージを送信したい場合はどうすればよいですか?
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' ...) ?
});