在下面的代码片段中(使用node.js和socket.io库),有时(有时不是)服务器在客户端为{设置套接字侦听器“之前发出事件something
{1}}事件将导致相关的匿名函数无法执行。
客户端:index.html
something
test.js的内容
<script src="socket.io/socket.io.js"></script>
<script>
...
var socket = io.connect('http://localhost:8080/abc');
...
</script>
<script src="/somewhere/test.js"></script>
服务器侧
...
console.log(new Date().getTime(), 'debugging');
socket.on('something', function(data) {
// will not execute
console.log(data);
});
...
客户端的console.log结果:io.of('/abc').on('connection', function(socket) {
console.log(new Date().getTime(), 'EMIT SOMETHING');
io.of('/abc').emit('something', 'b');
});
服务器端console.log的结果:1439057954676 debugging
为什么服务器在客户端设置监听器之前发出事件?
答案 0 :(得分:0)
尝试将 var socket = io.connect('http://localhost:8080/abc'); 和 socket.on('something',function(data)放入相同的脚本标记。
(基本上尝试将整个脚本放在一个HTML元素中,而不是将它们分开。)