我在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
我做错了什么?
答案 0 :(得分:9)
最后,在我真正撞墙后,我决定在几个环境中进行测试,看看它是否是防火墙问题,因为机器落后于几个。
事实证明,除了我之外没有人遇到这个问题所以我检查了防病毒软件(趋势科技),在禁用之后,Chrome / Firefox就能够发挥它们的魔力。
除了它在这里所说的内容之外 - Socket.IO and firewall software - 每当你遇到互联网上似乎没有人(即没有登录github或socket.io组)的问题时,它可能是由你的防病毒引起的。他们是邪恶的。有时。
答案 1 :(得分:1)
你应该只是让socketio听取应用程序本身 此外,我从来不需要使用您正在执行的套接字进行所有服务器端配置 - socket.io应该在大多数浏览器上开箱即用,而不会这样做。我会首先尝试不配置。 此外,在服务器上,您应该从传递给回调函数的套接字发出,而不是执行io.sockets.on。
var io = socketio.listen(app);
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);
socket.emit('currentStatus', {'connected': true);
});
在客户端上,您需要先连接:
var socket = io.connect();
socket.on('currentStatus', function (data){ console.log(data) });
如果您想查看使用socket.io的双向通信示例,请查看我的Nodio应用程序。
服务器端: https://github.com/oveddan/Nodio/blob/master/lib/Utils.js
客户方: https://github.com/oveddan/Nodio/blob/master/public/javascripts/Instruments.js