Задать вопрос
yvikt
@yvikt
it-шник самоучка

Как работает websocket на низком уровне?

Интересует объяснение работы websocket на низком уровне.
На сколько мне известно, websocket это lightweight wrapper over tcp.
Но вот не до конца понятно что на происходит на сервере.
Ниже я изложу свое представление/предположение того как это работает. Я не специалист в unix tcp/ip and system programming, поэтому мое изложение скорее всего далеко от истины. Я буду использовать понятные для меня термины.
Термины и сокращения: СП-слушающее приложение
Рассчитываю на то, что специалист в данной области сможет понять что я хочу узнать)
Итак, представим что сервер, скажем Nginx, слушает 80 порт, что подразумевает передачу байтов данных между ним и клиентом. После установления обычного tcp соединения и "переговоров" Upgrade: WebSocket Connection: Upgrade (по сути обмен текстовой информацией между клиентом и сервером) создается ws-соединение.
Вопрос 1
Браузер инициирует новое tcp соединение на тот же 80 порт сервера или бывают случаи что на другой ?
Вопрос 2
Что сервер делает с ws пакетами - проксирует их к СП как есть в обертке, или же обертку раскрывает и передает "чистые/сырые" данные далее ?
Вопрос 3
Как сервер отличает ws от http - по некой сигнатуре - типа по последовательности первых пришедших байт, по которым можно распознать что это именно ws а не http ?
Вопрос 4
Как эти данные передаются в сторону СП - через переменные окружения, или через unix-socket или через tcp стек?
Если используя последние два варианта, то получается что сервер держит внутри системы соединения с СП до тех пор пока "наружное" tcp соединение между клиентом и сервером не буде закрыто?
Вопрос 5
В свою очередь СП это отдельный unix процесс отличный от основного бекенд приложения, которое работает по принципу "спросили - запустился - обработал - сформировал ответ - отправил - завершился" Или же это все то же бекенд приложение только в том случае если с ним установлено ws-соединение, оно не прекращает свою работу?
  • Вопрос задан
  • 5798 просмотров
Подписаться 5 Простой Комментировать
Ответ пользователя Виктор Яковенко К ответам на вопрос (3)
yvikt
@yvikt Автор вопроса
it-шник самоучка
Большое спасибо за развернутый ответ.
Для меня стало открытием что ws не работает без http, т.е. только поверх.
Я почему-то думал что после переговоров, клиент и сервер переходят на чистый TCP (почти чистый, учитывая что ws обертка легковесная). Вот почему мне было непонятно, как после переговоров веб сервер идентифицирует и проксирует "новоустановленное" (как я думал) TCP соединение.
А все оказывается намного проще )
Ответ написан
Комментировать