我正在使用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。
我做错了什么?
答案 0 :(得分:1)
每个新连接都会触发connection
事件,每个客户端连接使用不同的socket
。在第一个代码段中的处理程序中,每次建立新连接时,都会破坏exports.socket
值。这意味着最新的客户端将收到任何以前客户的新消息。
您需要重新组织代码,并通过创建新实例并将套接字ID传递给每个sendJSONReport
事件,将套接字存储在具有connection
功能的模块中。