首页 > 解决方案 > Socket.broadcast 也调用发送者

问题描述

我使用套接字发送鼠标事件坐标。一切正常,但 socket.broadcast 也会触发发送者。我认为 socket.broadcast 也不应该称呼自己,但不知何故它发生在这里。

这是我的客户端发出

ball.onmousedown = function(event) {
    var coords = [event.pageX, event.pageY];
    socket.emit('ballMouseDown', coords);
}

我的服务器端,这里一切正常

socket.on('ballMouseDown', function (coords) {
    socket.broadcast.emit('ballMouseDown', coords);
});

我的客户端再次

[编辑] 以下代码段位于一个单独的公共 JS 文件中。如果我把它放在 index.html 文件中,广播工作正常。

socket.on('ballMouseDown', function(coords){
    // fired in the sender's console too
    console.log(coords);
})

坐标按预期出现在其他用户控制台中,但它也在发送者的控制台中,由socket.on侦听器中的同一行触发。

我在这些文件中有一个消息事件,在客户端使用表单提交按钮触发,这里的 socket.broadcast 工作正常。鼠标事件可能是问题所在,但我还没有找到与此相关的任何内容。

标签: node.jssockets

解决方案


我发现了问题。它不是单独的文件,而是我这样称呼它。如果我将 放在<script src="js/draganddrop.js"></script>index.html 文件的末尾,它会按预期工作。我认为这与加载时间有关,因为在文件之前不需要调用任何东西。

所以这解决了我的问题。希望它可以帮助某人。


推荐阅读