Обновляет ли socket.io транспорт с web-сокета с опроса?

Я использую nodejs с socket.io и Express Frame Work. Ниже приводится вывод журнала, который я получаю, когда запускаю команду

DEBUG=* /bin/www

Ниже приведен вывод журнала.

  engine intercepting request for path "/socket.io/" +2m
  engine handling "GET" http request "/socket.io/?EIO=3&transport=polling&t=1414498393419-0" +0ms
  engine handshaking client "WECN1dP0tobacKc8AAAB" +1ms
  engine:socket sending packet "open" ({"sid":"WECN1dP0tobacKc8AAAB","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000}) +0ms
  engine:polling setting request +0ms
  engine:socket flushing buffer to transport +0ms
  engine:polling writing "  �0{"sid":"WECN1dP0tobacKc8AAAB","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000}" +1ms
  engine:socket executing batch send callback +1ms
  socket.io:server incoming connection with id WECN1dP0tobacKc8AAAB +2.5m
  socket.io:client connecting to namespace / +1.3m
  socket.io:namespace adding socket to nsp / +2.5m
  socket.io:socket socket connected - writing packet +1.3m
  socket.io:socket joining room WECN1dP0tobacKc8AAAB +0ms
  socket.io:client writing packet {"type":0,"nsp":"/"} +1ms
  socket.io-parser encoding packet {"type":0,"nsp":"/"} +2.5m
  socket.io-parser encoded {"type":0,"nsp":"/"} as 0 +0ms
  engine:socket sending packet "message" (0) +1ms
  socket.io:socket joined room WECN1dP0tobacKc8AAAB +5ms
  engine intercepting request for path "/socket.io/" +140ms
  engine handling "GET" http request "/socket.io/?EIO=3&transport=polling&t=1414498393557-1&sid=WECN1dP0tobacKc8AAAB" +0ms
  engine setting new request for existing client +1ms
  engine:polling setting request +0ms
  engine:socket flushing buffer to transport +0ms
  engine:polling writing "�40" +0ms
  engine:socket executing batch send callback +0ms
  engine upgrading existing transport +39ms
  engine:socket might upgrade socket transport from "polling" to "websocket" +0ms
  engine intercepting request for path "/socket.io/" +16ms
  engine handling "GET" http request "/socket.io/?EIO=3&transport=polling&t=1414498393618-2&sid=WECN1dP0tobacKc8AAAB" +0ms
  engine setting new request for existing client +0ms
  engine:polling setting request +0ms
  engine:ws received "2probe" +2ms
  engine:ws writing "3probe" +0ms
  engine:socket writing a noop packet to polling for fast upgrade +100ms
  engine:polling writing "�6" +0ms
  engine:ws received "5" +4ms
  engine:socket got upgrade packet - upgrading +0ms
  engine:ws received "2" +25s
  engine:socket packet +0ms
  engine:socket got ping +0ms
  engine:socket sending packet "pong" (undefined) +0ms
  engine:socket flushing buffer to transport +0ms
  engine:ws writing "3" +0ms
  engine:ws received "2" +25s
  engine:socket packet +0ms
  engine:socket got ping +0ms
  engine:socket sending packet "pong" (undefined) +0ms
  engine:socket flushing buffer to transport +0ms
  engine:ws writing "3" +0ms
  engine:ws received "2" +25s
  engine:socket packet +0ms
  engine:socket got ping +0ms
  engine:socket sending packet "pong" (undefined) +0ms
  engine:socket flushing buffer to transport +0ms
  engine:ws writing "3" +0ms
  engine:ws received "2" +25s
  engine:socket packet +0ms
  engine:socket got ping +0ms
  engine:socket sending packet "pong" (undefined) +0ms
  engine:socket flushing buffer to transport +0ms
  engine:ws writing "3" +1ms

Я не вижу ни одного сообщения журнала, подтверждающего обновление транспорта. Также сообщения пинг-понга продолжают происходить.

Означает ли это, что транспорт websocket установлен?

1 ответ

Да, сначала он использует опрос, а затем обновляется до веб-сокета. Я уверен, что если вы подключаетесь через браузер или используете wireshark, вы видите сообщение "HTTP/1.1 101 Switching Protocols" с сервера. Также вы видите в журналах "engine:ws", что означает, что websocket работает. Если вы все еще не уверены, что вы можете распечатать тип транспорта (например, при отключении). Это код на стороне сервера (socket.io 1.1.0):

  socket.on('disconnect', function () {
    console.log(socket.id + ' disconnect ('+ socket.client.conn.transport.constructor.name +')';
  });
Другие вопросы по тегам