node.js - 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 工作正常。鼠标事件可能是问题所在,但我还没有找到与此相关的任何内容。
解决方案
我发现了问题。它不是单独的文件,而是我这样称呼它。如果我将 放在<script src="js/draganddrop.js"></script>
index.html 文件的末尾,它会按预期工作。我认为这与加载时间有关,因为在文件之前不需要调用任何东西。
所以这解决了我的问题。希望它可以帮助某人。
推荐阅读
- hibernate - HQL查询如何返回实体?
- perl - 如何使用 IO::Socket::SSL 获取我自己的服务器 IP 地址
- ffmpeg - 使用 ffmpeg 命令在视频中添加多个元数据
- postgresql - Postgres docker实例在重启后不会保持状态
- javascript - 折线图路径中不必要的间隙
- vuejs2 - 使用 bootstrap-vue:如何将类添加到 b 分页组件中的页面按钮
- java - 如何在 Jmeter 中获取 UTC 时区
- java - 尽管我确保数组索引小于数组大小,但如何修复数组索引超出范围?
- couchbase - Couchbase Python sdk 2.5.3 安装
- javascript - 相机未在 React-native-qr-code-scanner 中授权