首页 > 解决方案 > socket.broadcast.emit 无法正确触发

问题描述

节点创建一个唯一的 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 有效,但是当另一个客户端连接时,我总是收到此 错误

标签: node.jswebsocketsocket.io

解决方案


socket.broadcast.emit("foo");

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

io.broadcast.emit("foo");

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


推荐阅读