我编写了一个小型 Socket.IO 服务器,它工作正常,我可以连接到它,我可以发送/接收消息,所以一切正常。此处仅提供代码的相关部分:
var RedisStore = require('socket.io/lib/stores/redis');
const pub = redis.createClient('127.0.0.1', 6379);
const sub = redis.createClient('127.0.0.1', 6379);
const store = redis.createClient('127.0.0.1', 6379);
io.configure(function() {
io.set('store', new RedisStore({
redisPub : pub,
redisSub : sub,
redisClient : store
}));
});
io.sockets.on('connection', function(socket) {
socket.on('message', function(msg) {
pub.publish("lobby", msg);
});
/*
* Subscribe to the lobby and receive messages.
*/
var sub = redis.createClient('127.0.0.1', 6379);
sub.subscribe("lobby");
sub.on('message', function(channel, msg) {
socket.send(msg);
});
});
在这里,我对某个客户端订阅不同房间的问题感兴趣,这就是为什么我也在每个套接字连接中使用 sub Redis 变量:因为每个客户端都可以订阅不同的房间并且可以接收消息从那里。我不完全确定上面的代码是否正常,所以请让我知道除了在 Socket.IO 连接中定义子 Redis 连接之外是否需要做任何其他事情:这也意味着为每个生成一个新的 Redis 连接客户端连接从订阅的房间提供他的消息?我想这是一个相当大的开销,所以我想无论如何都想解决它?
谢谢