Проблемы с подключением 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);
  });
});

На одни компы подключается нормально, на другие нет. Он одинаков во всех браузерах.

Кто-нибудь знает, почему это произойдет? Может ли быть какая-то проблема с локальной сетью, которая вызывает это?

ОБНОВЛЕНИЕ Похоже, что люди, которые не могут подключиться со своих компьютеров, используют антивирус с веб-щитами в реальном времени, которые блокируют соединение. Когда они отключают его, он нормально подключается в некоторых браузерах...


person Kit    schedule 16.08.2011    source источник
comment
У Socket.io есть проблемы с chrome 14 и 15, поскольку они изменили версию веб-сокета. Лично я отключил транспорт через веб-сокет, чтобы все работало надежно, пока все улаживается.   -  person generalhenry    schedule 16.08.2011
comment
Я протестировал вашу демонстрацию на OS 10.6.8. Safari отлично работал с веб-сокетами, Firefox отлично справлялся с xhr, Opera отлично справлялся с jsonp, Chrome 15 возился с веб-сокетами. (То же самое в Chrome OS)   -  person generalhenry    schedule 16.08.2011
comment
Похоже, что это повлияло на пользователей, которые использовали антивирус Avast, печально известный блокировкой веб-сокетов. Аваст не любит 80 порт, поэтому мне придется его поменять на что-то другое. Спасибо за вашу помощь @generalhenry.   -  person Kit    schedule 17.08.2011


Ответы (1)


Я использую socket.io и node.js в течение последних двух месяцев, и некоторые проблемы, подобные вашей, тоже случались со мной.

Брандмауэры часто создают проблемы с портом 80, особенно при использовании с DNS (например, в корпоративной сети), потому что они будут изменять заголовки пакетов сокетов. Один из способов обхода может заключаться в том, чтобы попробовать другой порт. В моем приложении есть сервер apache на порту 80, а мой веб-сокет - на порту 843, все отлично работает в Firefox и Chrome.

Вы можете использовать резервную опцию xhr-polling, чтобы обойти этот тип ошибок, добавив этот скрипт:

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

xhr-polling обеспечивает меньшую производительность в режиме реального времени, но очень надежен и работает в большинстве браузеров и сетевых конфигураций.

Я надеюсь, что это поможет вам!

person Bruno Gagnon-Adam    schedule 08.08.2012
comment
Вы также можете просмотреть этот пост для получения дополнительной информации о socket.io и брандмауэрах: github.com/LearnBoost/socket.io/wiki/ - person Bruno Gagnon-Adam; 08.08.2012