2011-08-16 72 views
4

我试图升级到socket.io 0.7.9并遇到问题。Socket.io 0.7.9连接问题

我已经使用了socket.io主页中的基本示例。我的服务器是:

var http = require('http'), 
    url  = require('url'), 
    https = require('https'), 
    fs  = require('fs'), 
    crypto = require('crypto'), 
    io  = require('../'), 
    sys  = require(process.binding('natives').util ? 'util' : 'sys'), 
    server = http.createServer(function(req, res){ 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end(); 
    }); 

server.listen(80,"[MYIP]"); 
var io = io.listen(server), buffer=[]; 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

它在一些计算机上连接正常,但在其他计算机上没有连接。所有浏览器都是一样的。

有谁知道为什么会发生这种情况?会有一些本地网络问题导致这种情况吗?

UPDATE 似乎无法从他们的计算机连接的人正在运行反病毒与实时网盾似乎阻止连接。当它们关闭时,它在某些浏览器上连接正常...

+1

因为他们改变了websocket版本,所以Socket.io在chrome 14和15上有问题。就我个人而言,我已经关闭了websocket的运输工具,以便在事情稳定的情况下可靠地运行。 – generalhenry

+0

我在OS 10.6.8上测试了你的演示。Safari做的websockets很好,Firefox做的xhr很好,Opera做的jsonp很好,Chrome 15用websockets弄错了。 (在Chrome操作系统上也是如此) – generalhenry

+0

看起来它正在影响那些使用Avast反病毒的用户,这种病毒以阻止Websockets而闻名。 Avast不喜欢80端口,所以我将不得不将其改为别的。感谢您的帮助@generalhenry。 – Kit

回答

4

我在过去的两个月中一直使用socket.io和node.js,并且像我的一些问题也发生在我身上。

防火墙通常是端口80的问题,特别是当与DNS(如在企业网络中)一起使用时,因为它们会使用套接字包的标头进行调整。一个解决办法可能是尝试另一个端口。 我的应用程序在端口80上有一个apache服务器,我的websocket在端口843上,在Firefox和Chrome上一切正常。

您可以使用XHR轮询后备选项加入这个脚本来绕过这个类型的错误:

io.set('transports', ['websocket','xhr-polling']); 

XHR轮询提供较少的实时性能,但确实是可靠,适用于大部分浏览器和网络配置。

我希望这会帮助你!

+0

你也可以看到这篇文章,了解更多关于socket.io和防火墙的信息:https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software –