【问题标题】:socket.io - passing events between nodessocket.io - 在节点之间传递事件
【发布时间】:2014-12-17 19:54:44
【问题描述】:

我受此启发:http://socket.io/docs/using-multiple-nodes/#passing-events-between-nodes,现在我想通过 redis 适配器同步我的两个 socket.io 实例。

这是我的代码:

//FIRST SERVER (server1.js)


var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

var test = 0;

io.on('connection', function (socket) {
    test+=1;
    console.log("connection. test = " + test);
});

//SECOND SERVER (server2.js)


var io = require('socket.io')(4000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

var test = 0;

io.on('connection', function (socket) {
    test+=1;
    console.log("connection. test = " + test);
});

当我连接到 server1.js(端口 3000)时 - 我看到“连接。 test = 1',很好,但是第二台服务器的控制台还是干净的。我希望第二台服务器(端口 4000)做同样的事情(打印 'connection = 1')。

我做错了什么?你能告诉我一个如何使用适配器的例子吗?

谢谢

【问题讨论】:

    标签: socket.io socket.io-redis


    【解决方案1】:

    如果您只连接到server1:3000,则不可能在server2:4000 上触发io.on('connection', ...) - 毕竟,您没有连接到该服务器。

    每个客户端将只连接到您的一台服务器。如果您不使用连接到不同服务器的 Redis 适配器客户端将无法通信。现在有了 Redis 适配器,服务器就可以知道彼此的客户端,并且可以向所有服务器的所有连接的客户端广播消息。

    【讨论】:

    • 听起来不错。有两件事要尝试。尝试将数据附加到套接字。 ex socket.username = 'ted'。如果这不起作用,您可以随时安装 redis pub/sub 并为节点创建一个类似通信通道的适配器,这样您就可以共享非 socket.io 消息。
    • 我有相同的两台服务器,我在机器人服务器和客户端中使用 socket.io@1.4.5。在我的代码中添加一个时间来打印连接的套接字总数。我在一台服务器上得到正确的数字,但在另一台服务器上我只得到 0。以下是我用于计数检查的内容。 Object.keys(io.sockets.connected).length)
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2015-01-10
    • 2014-02-23
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多