【问题标题】:socket.broadcast.emit doesn't fire correctlysocket.broadcast.emit 无法正确触发
【发布时间】:2019-04-14 12:32:51
【问题描述】:

节点创建一个唯一的 url 并将 socket.io 绑定到它。

var io = require("socket.io").listen(server, {path: req.originalUrl});

当客户端连接时,也会将他的 socket.io-client 绑定到该 url

var socket = io('192.168.1.101:3000', {path: window.location.pathname});

我没有问题,一切都很好。

当客户端执行特定操作时,服务器会执行

socket.broadcast.emit("foo"); //I made console.log here and it prints

客户端:

socket.on("foo", () => console.log("okay"));

问题是客户端“foo”事件几乎从未被触发。有时它会被解雇,但仅限于特定场合。例如,socket.io-client 会自动重新连接到服务器,然后触发事件。

我不知道问题是否与此有关,因为例如 socket.emit 有效,但是当另一个客户端连接时,我总是得到这个 error

【问题讨论】:

    标签: node.js websocket socket.io


    【解决方案1】:
    socket.broadcast.emit("foo");
    

    向所有连接的客户端广播一条消息,socket 指定的客户端除外。如果要向所有连接的客户端广播,请使用:

    io.broadcast.emit("foo");
    

    您还必须确保您的客户端已正确连接,并且不会经常丢失和重新建立连接(您可以通过在服务器上记录连接和断开连接事件来查看是否正在发生这种情况)。如果他们以某种方式失去连接然后重新连接,那么哪些人会收到广播消息将取决于哪些人没有处于暂时失去连接的中间。

    【讨论】:

    • 是的,如果我有两个客户端,其中一个执行操作,另一个会触发 foo 事件。这不会发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2017-02-11
    相关资源
    最近更新 更多