我正在尝试升级到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);
});
});
它在某些计算机上连接正常但在其他计算机上没有连接。所有浏览器都是一样的。
有谁知道为什么会这样?是否会出现导致此问题的本地网络问题?
更新 似乎无法从他们的计算机连接的人正在使用似乎阻止连接的实时网络防护来运行反病毒。当他们关闭它时,它会在某些浏览器上连接OK ...
答案 0 :(得分:4)
过去两个月我一直在使用socket.io和node.js,而且像你这样的一些问题也发生在我身上。
防火墙通常是端口80的问题,尤其是在与DNS(如公司网络)一起使用时,因为它们会使用套接字包的标头进行调整。一个工作可能是尝试另一个端口。 我的应用程序在端口80上有一个apache服务器,我的websocket在端口843上,一切都在Firefox和Chrome上正常工作。
您可以使用xhr-polling fallback选项通过添加此脚本来绕过此类错误:
io.set('transports', ['websocket','xhr-polling']);
xhr-polling提供的实时性能较低,但确实可靠,适用于大多数浏览器和网络配置。
我希望这会对你有所帮助!