node.js - Socket.io 和现代浏览器不工作

标签 node.js websocket socket.io

我在使用 socket.io 和现代浏览器时遇到了一些奇怪的问题。令人惊讶的是,IE9 工作正常,因为回退到 flashsocket 似乎工作得更好。

在我的服务器中(使用 express)

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

我做错了什么?

最佳答案

最后,在真的把我的头撞到墙上之后,我决定在几个环境中进行测试,看是否是防火墙问题,因为机器在几个环境之后。

事实证明,除了我没有人遇到问题,所以我检查了防病毒软件 (Trend Micro),禁用后,Chrome/Firefox 能够发挥它们的魔力。

故事的寓意

除了这里所说的 - Socket.IO and firewall software - 每当您遇到互联网上似乎没有人遇到的问题(即,未登录 github 或 socket.io 组)时,它可能是由您的防病毒软件引起的。他们是邪恶的。有时。

关于node.js - Socket.io 和现代浏览器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650035/

相关文章:

node.js - 如何使用node js实时改变内容?

javascript - JavaScript 中的对象声明

node.js - 如何强制应用引擎上传 node_modules

node.js - 如何使用experimental-specifier-resolution=node 运行node.js cli?

php - websocket 与 mysql 的连接

java - Android开发,Gottox socket.io-java-client : file not fount Exception/socket. io/1/

node.js - 如何在nodejs中为HTTPS使用外部证书

javascript - 服务器发送事件与 websockets?

ios - iOS 的 FIONBIO 值是多少,以阻止/取消阻止套接字?

node.js - 将我的 socket.io 从 http 转换为 https 后,我的 javascript 给我一个奇怪的结果