【发布时间】:2015-11-01 01:22:39
【问题描述】:
在以下代码 sn-p(使用 node.js 和 socket.io 库)中,有时(有时不会)服务器在客户端为 @ 设置套接字侦听器之前发出事件 something 987654322@ 事件将导致关联的匿名函数无法执行。
客户端:index.html
<script src="socket.io/socket.io.js"></script>
<script>
...
var socket = io.connect('http://localhost:8080/abc');
...
</script>
<script src="/somewhere/test.js"></script>
test.js 的内容
...
console.log(new Date().getTime(), 'debugging');
socket.on('something', function(data) {
// will not execute
console.log(data);
});
...
服务器端:
io.of('/abc').on('connection', function(socket) {
console.log(new Date().getTime(), 'EMIT SOMETHING');
io.of('/abc').emit('something', 'b');
});
客户端的console.log结果:1439057954676 debugging
服务器端console.log结果:1439057954114 EMIT SOMETHING
在上面的例子中,为什么服务器在客户端设置监听器之前发出事件?
【问题讨论】:
-
仅供参考,您应该知道,在 localHost 上运行与通过 Internet 运行到远程服务器时,您可能会遇到不同的时间问题,因为 localHost 的响应速度要快得多。
-
@jfriend00,当然,但无论代码运行的环境如何,所描述的场景都不应该发生
-
是的,逻辑上会说这不应该发生,但是你能指出我在 localHost 上运行时不应该发生的规范吗?对于图像,如果您执行
img.src = "xxx.jpg";后跟img.onload = function() {...},您可能会错过load事件(如果图像在缓存中),因此在附加处理程序之前不会超出浏览器触发某些内容。
标签: javascript node.js socket.io