注意:当我删除“node_modules\uws\uws_win32_59.node”时,它工作正常。uws 被engine.io 使用,socket.io 使用它。
我写了一个非常基本的应用程序来演示这个问题。在下面的应用程序中,在 chrome 中打开了 index.html 的 2 个选项卡,单击“emit”会从客户端发出消息,但需要很长一段时间才能到达服务器。2-15+秒的任何地方。如果我只打开 1 个 index.html 页面,它可以正常工作,但是一旦打开第二个页面,我就会遇到问题。如果我删除上面的 uws_win32_59.node,它适用于多个连接。
服务器.js:
var io = require('socket.io')();
io.on('connection', function(socket){
console.log('connection made');
socket.on('number', function(num) {
console.log(num + ' received on server');
io.emit('number', num);
console.log(num + ' emitted from server');
});
});
io.listen(9001);
索引.html:
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
</head>
<body>
<button id="emit">emit</button>
<p id="nums"></p>
<script>
var socket = io('http://localhost:9001');
socket.on('number', function(num){
console.log(num + ' received on client');
document.getElementById('nums').innerHTML = num;
});
var num = 0;
document.getElementById('emit').addEventListener('click', function(){
num++;
socket.emit('number', num);
console.log(num + ' emitted from client');
});
</script>
</body>
</html>
默认的“npm install socket.io”安装上面提到的 uws 模块,它本身由 engine.io 使用。
运行“节点服务器”并打开 index.html 的 2 个实例并单击发出并注意浏览器开发人员工具控制台日志记录和节点服务器控制台日志记录以重新创建问题。
编辑:看起来windows os上的uws存在一个未解决的问题:https ://github.com/socketio/socket.io/issues/3100