【问题标题】:socket id of the wrong client错误客户端的套接字 id
【发布时间】:2013-11-27 22:01:13
【问题描述】:

我正在使用 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。

我做错了什么?

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

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

    您需要重新组织您的代码,并将套接字存储在具有sendJSONReport 函数的模块中,方法是创建一个新实例并在每个connection 事件上将套接字ID 传递给它。

    【讨论】:

    • 谢谢...我试着听从你的建议:我将 socket.id 作为参数传递,我导出 io,然后像这样发出:require("./socketMngr").io.sockets .socket(socket_id).emit('发送 JSON 报告', msg);问题仍然存在。你能告诉我我做错了什么吗?
    • 对不起,我不关注...您可以编辑您的问题并为每个代码的 sn-ps 添加文件名吗?还至少添加来自使用此sendJSONReport 函数的模块之一的代码。
    • 我发现了我的错误... Thnx 很多:)
    • 很高兴听到您能够修复它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多