我在使用 socket.io 和现代浏览器时遇到了一些奇怪的问题。令人惊讶的是,使用 IE9 可以正常工作,因为回退到 flashsocket 似乎效果更好。
在我的服务器中(使用快递)
var io = socketio.listen(server.listen(8080));
io.configure('production', function(){
console.log("Server in production mode");
io.enable('browser client minification'); // send minified client
io.enable('browser client etag'); // apply etag caching logic based on version number
io.enable('browser client gzip'); // gzip the file
io.set('log level', 1); // reduce logging
io.set('transports', [ // enable all transports (optional if you want flashsocket)
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
});
在浏览器上,我可以在网络选项卡(在 Chrome 上)中看到 websocket 已建立并进入101 Switching Protocols
待处理模式。之后,出现 xhr-polling 和 jsonp-polling(flashsocket 发生了什么?)
最糟糕的部分是信息不会来回传递。我有这个连接:
io.sockets.on('connection', function (socket) {
// If someone new comes, it will notified of the current status of the application
console.log('Someone connected');
app.sendCurrentStatus(socket.id);
io.sockets.emit('currentStatus', {'connected': true);
});
在客户端:
socket.on('currentStatus', function (data){ console.log(data) });
但是,当我关闭启动的服务器时,我只能看到该日志:
NODE_ENV=production node server.js
我究竟做错了什么?