使用socket.io的以下简单应用程序,我得到了非常奇怪的行为,但只在我测试过的某些计算机上。在大多数计算机上,它似乎工作正常。这是我使用的设置:
server.js:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(80);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
i = 0;
setInterval(function() {
socket.emit('news', 'test');
}, 200);
socket.on('my other event', function (data) {
console.log(data);
});
});
的index.html:
<html>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('news', function (data) {;
console.log("test");
socket.emit('my other event', { my: 'data' });
});
</script>
</html>
<body></body>
如果我将间隔设置为30而不是200毫秒,它似乎运行良好(即客户端和服务器都按时接收套接字消息),但是当我将间隔设置为100或更多毫秒时,客户端会不响应服务器发送的前13条(因此是13条)消息,然后突然一次接收所有13条消息,直接出现此错误:
“与'ws://example.com/socket.io/1/websocket/63zOWQ5mEuzV01WuqZ5X'的WebSocket连接失败:无法识别的帧操作码:11”。
此行为会重复一段时间,因此突然收到13个消息的集合,然后发生错误,但有时,在随机数量的错误集之后,它会再次开始正常运行。我知道这听起来很奇怪,但我找不到这个问题的根源,这极大地影响了用户体验。什么可能引发这个问题?
我使用的是node.js版本0.8.24,socket.io 0.9.14和chrome版本31.0.1650.63 m。我在CentOS 6.5版上运行。在IE 10上也会发生此行为,并出现其他错误:“SCRIPT12152:WebSocket错误:网络错误12152”