【发布时间】:2012-07-23 21:39:46
【问题描述】:
我在使用 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
我做错了什么?
【问题讨论】:
-
在客户端,你是先用 var socket = io.connect(); ?
-
如果我没有连接,网络选项卡中将不可用也不可见。
-
此外,大多数 PAAS 托管公司不支持 Web 套接字。当应用程序在本地运行并且仅不适用于生产部署时,这是否有效?
-
它自托管在我安装的我公司的服务器上,我需要在服务器上安装一些特殊的东西吗?
标签: node.js websocket socket.io