Ответ 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
).В этот момент сокет считается подключенным, а транспорт - чтобы открыть соединение.
Если транспортное соединение закрыто, оба конца должны буферизировать сообщения, а затем соответствующим образом назначить их для отправки в виде когда соединение возобновляется.
Если соединение не возобновлено в течение согласованного таймаута, сокет считается отключенным. На этом этапе клиент может решите повторно подключить сокет, что подразумевает новое рукопожатие.
Если вам нужно больше деталей, вы можете прочитать остальную часть спецификации здесь