как работает socket.io? [закрыто]

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

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

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

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

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

 Jageen08 дек. 2017 г., 08:42
@SonicSoul проголосовал за открытие
 Anshul22 апр. 2017 г., 23:15
Даже после прочтения документации на socket.io 'с сайта, этоНе ясно, как это работает внутри.
 sleske27 мар. 2015 г., 09:01
Ну, некоторые довольно широкие ("Какие точные механики??) Кроме того, несколько вопросов в одном, как правило, не очень хорошая идея. Попробуйте прочитать документы наsocket.io/docs и наgithub.com/Automattic/engine.io (socket.io использует Engine.io). Затем задайте более сфокусированный вопрос.
 Sonic Soul24 мая 2013 г., 02:50
а? мои вопросы довольно специфичны
 alexr10105 окт. 2017 г., 17:09
Согласитесь, SO должен автоматически открывать эти посты после определенного количества голосов.

Ответы на вопрос(2)

Решение Вопроса

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

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

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

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

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

Состояние сокета Socket.IO может быть:disconnecteddisconnectingconnected а также .connecting

Транспортное сообщение может быть,closedclosingopen, а также .opening

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

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

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

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

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

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

 Sonic Soul24 мая 2013 г., 02:26
это замечательно! спасибо @JAM. ценить это

ВАРЕНЬЕ'Сообщение s хорошо суммирует то, что socket.ioявляется; Я'Я хотел бы конкретно ответить на некоторые другие ваши вопросы.

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

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

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

Ваш ответ на вопрос