Поддерживает ли Google Chrome socket.io? - PullRequest
2 голосов
/ 08 сентября 2011

Я делаю небольшую многопользовательскую игру, используя node.js и socket.io на своем ноутбуке.Иногда, когда я хочу протестировать некоторые многопользовательские функции, я захожу в игру, используя свой ПК (ПК и ноутбук подключены к сети LAN).Socket.io соединяется с IP-адресом моего маршрутизатора (196. ...) и портом 8080. До сегодняшнего дня все работало хорошо, а когда я просто хотел посмотреть, как это работает, прежде чем что-то изменить - внезапно ничего не вышло.Сначала я открыл Google Chrome на своем ноутбуке и вошел в систему, и все заработало.Затем я открыл Google Chrome на своем ПК и попытался подключиться, но это не сработало.Сначала пользователь вводит свое имя и пароль в форму и нажимает кнопку входа в систему, которая вызывает эту функцию:

          login = function()
          {
               var n = document.forms['logn']['name'].value;
               var p = document.forms['logn']['password'].value;              

            var socket = io.connect("http://192.168.0.13:8080");
            socket.emit("login", {n: n, p: p});

            socket.on("got", function(data){
                 if (data.good)
                 {
                      main(socket, n)
                 }
                 else
                 {
                      alert("Failed to log in.");
                 }
            });
          }

Когда я вызываю функцию get, ничего не происходит.Я заметил, что сервер регистрирует сообщения, подобные этому:

запрос установки GET /socket.io/1/websocket/

Но xhr-опрос чаще, чемWebSocket.Это все, что я знаю на данный момент, также все работает нормально в Firefox, поэтому я думаю, что это проблема с Google Chrome.

сервер регистрирует, когда я пытаюсь войти в систему с ПК:

debug - обслуживаемая статическая /socket.io.js debug - клиент авторизован
info - авторизован рукопожатие 30836340583773206
debug - запрос установки GET /socket.io/1/websocket/30836340583773206
debug - устанавливается heartbeatинтервал для клиента 30836340583773206
debug - клиент авторизован для
debug - запрос на установку GET /socket.io/1/xhr-polling/30836340583773206?t=1315509666877
debug - установка таймаута опроса
debug - отменатранспорт
отладка - очищенный интервал пульса для клиента 30836340583773206
отладка - обслужен статический /socket.io.js

1 Ответ

5 голосов
/ 05 декабря 2011

У меня просто точно такая же проблема.

Я мог рукопожатие и аутентификацию через Chrome, но любые испуски не были правильно обработаны на клиенте (хотя Socket.io отправлял их).

Войдите на сервер и обновите socket.io.

$> npm ls сообщит вам последнюю версию установленных модулей.В моем случае я работал:

/var/www/discovery/node
├─┬ express@2.4.6 
│ ├── connect@1.6.2 
│ ├── mime@1.2.2 
│ └── qs@0.3.1 
├── iniparser@1.0.3 
├── jsonrpc@0.1.1 
├── jsonrpc-ws@0.0.3 
├── jsonrpc2@0.0.6 
├─┬ mysql@0.9.3 
│ └─┬ hashish@0.0.4 
│   └── traverse@0.5.1 
└─┬ socket.io@0.7.9 
  ├── policyfile@0.0.4 
  ├── redis@0.6.6 
  └─┬ socket.io-client@0.7.9 
    ├── uglify-js@1.0.6 
    ├── websocket-client@1.0.0 
    └── xmlhttprequest@1.2.2 

Вы можете видеть, что socket.io@0.7.9 старый.Это также означает, что на нем не установлено последнее обновление протокола ws: // websocket.

Поэтому, чтобы исправить это, просто запустите:

$> npm update socket.io express
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...