Подтвердить что ты не робот

Как работает socket.io?

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

Какова точная механика socket.io?

это порт 80 или отдельный?

действительно ли он остается открытым или эта часть моделируется?

Есть ли способ профилировать каждое событие сокета? (вроде как использовать скрипач, чтобы узнать, что происходит при вызовах ajax)

4b9b3361

Ответ 1

Для отладки вы можете попробовать Тесей.

Ниже представлен краткий обзор socket.io SPEC:

Socket.IO стремится привнести API-интерфейс, похожий на WebSocket, во многие браузеры и устройств с некоторыми конкретными функциями, помогающими в создании реальных приложений реального времени и игр.

  • Поддержка нескольких транспортных средств (старые пользовательские агенты, мобильные браузеры и т.д.).
  • Несколько сокетов под одним и тем же соединением (пространства имен).
  • Обнаружение разъединения посредством сердечных сокращений.
  • Дополнительные атрибуты.
  • Поддержка повторного соединения с буферизацией (идеально подходит для мобильных устройств или плохих сетей)
  • Легкий протокол, который находится поверх HTTP.

Анатомия гнезда Socket.IO

Клиент Socket.IO сначала решает использовать транспорт для использования.

Состояние гнезда Socket.IO может быть disconnected, disconnecting, connected и connecting.

Транспортное соединение может быть closed, closing, open и opening.

Простой HTTP-квитирование происходит в начале Socket.IO подключение. Рукопожатие, в случае успеха, приводит к клиенту прием:

  • Идентификатор сеанса, который будет передан для транспорта для открытия соединений.
  • Число секунд, в течение которых ожидается биение (heartbeat timeout)
  • Через несколько секунд после того, как транспортное соединение закрыто, когда сокет считается отключенным, если транспортное соединение не возобновляется (close timeout).

В этот момент сокет считается подключенным, а транспорт - чтобы открыть соединение.

Если транспортное соединение закрыто, оба конца должны буферизировать сообщения, а затем соответствующим образом назначить их для отправки в виде когда соединение возобновляется.

Если соединение не возобновлено в течение согласованного таймаута, сокет считается отключенным. На этом этапе клиент может решите повторно подключить сокет, что подразумевает новое рукопожатие.

Если вам нужно больше деталей, вы можете прочитать остальную часть спецификации здесь

Ответ 2

Сообщение JAM хорошо описывает, что такое socket.io; Я хотел бы конкретно рассмотреть некоторые из ваших других вопросов.

  • Socket.io присоединяется к экземпляру http.Server и добавляет к нему обработчики. Он не слушает сетевой порт сам по себе; он просто добавляет обработчики специфических для socket.io к существующему HTTP-серверу. (Однако, если вы вызываете io.listen() с номером, он внутренне создает новый HTTP-сервер, который слушает указанный порт и присоединяется к нему.)

  • Он действительно остается открытым, если он использует транспорт WebSockets. Он также включает резервные механизмы, которые используют традиционные (длинные) опросы аякс-запросов. Поэтому ответ зависит от того, какие API-интерфейсы поддерживает браузер. (Вы можете указать, какие резервные копии вы хотите использовать, если они есть.)

  • Fiddler теперь поддерживает веб-узлы, а также инструменты разработчика Chrome:

enter image description here