节点创建一个唯一的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
答案 0 :(得分:0)
socket.broadcast.emit("foo");
向所有连接的客户端广播一条消息,除了socket
指定的消息。如果要广播给所有连接的客户端,请使用:
io.broadcast.emit("foo");
您还必须确保客户端正确连接,并且不定期丢失并重新建立连接(您可以通过在服务器上记录连接和断开连接事件来查看是否正在发生)。如果他们不知何故失去了连接,然后重新连接,那么哪个广播消息将取决于那些不在临时丢失的连接中间的人。