错误客户端的套接字ID

时间:2013-11-27 13:43:26

标签: javascript node.js socket.io

我正在使用socket.io。

我导出套接字,以便在不同的模块中使用它:

   io.sockets.on('connection', function (socket) {
        //export socket to be used throughout the application
        exports.socket = socket;

//more code...

 });

我使用此功能从其他模块发送消息:

var sendJSONReport = function (report) {
    report.client_id = require("./socketMngr").socket.id;
    var msg = JSON.stringify(report);
    require("./socketMngr").socket.emit('sent JSON Report', msg);
};

在我的客户端js中,我在console.log中发送了消息。

我打开两个chrome选项卡,并使用不同的数据在两者上运行应用程序。 我看到其中一个标签获取了应该到达另一个标签的消息。 client_id与应该到达该选项卡的消息相同,这意味着服务器发送错误的客户端ID。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

每个新连接都会触发connection事件,每个客户端连接使用不同的socket。在第一个代码段中的处理程序中,每次建立新连接时,都会破坏exports.socket值。这意味着最新的客户端将收到任何以前客户的新消息。

您需要重新组织代码,并通过创建新实例并将套接字ID传递给每个sendJSONReport事件,将套接字存储在具有connection功能的模块中。