как это происходит socket.io работа? [закрытый]


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

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

Это на порту 80 или отдельно?

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

есть ли способ профилировать каждое событие сокета ? (вроде как с помощью скрипача чтобы увидеть, что происходит в AJAX-вызовы)

2 57

2 ответа:

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

вот краткий обзор socket.io SPEC:

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

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

Анатомия а Socket.IO сокет

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

состояние сокета.Разъем ввода-вывода может быть disconnected, disconnecting,connected и connecting.

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

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

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

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

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

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

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

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

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

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

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

enter image description here