Каков принцип WebSocket? Почему возможно постоянное соединение?

сервер HTTP WebSocket Ajax
Каков принцип WebSocket? Почему возможно постоянное соединение?

Лоб. . Ответ с наибольшим количеством голосов не попал в точку, как он в конце концов попал в Nodejs? . Веб-сокеты — это просто протоколы. . Я отвечу по одному

1. WebSocket это что-то (протокол) из HTML5, а значит протокол HTTP не изменился, или не важно, но HTTP не поддерживает постоянные соединения (длинные соединения, циклические соединения не в счет)
Во-первых, у HTTP есть 1.1 и 1.0, это так называемая keep-alive, которая объединяет несколько HTTP-запросов в один, но Websocket на самом деле является новым протоколом, который в принципе не имеет ничего общего с HTTP-протоколом, просто чтобы быть совместим с рукопожатием существующих браузеров. Это всего лишь спецификация, а это значит, что он является дополнением к протоколу HTTP и его можно понять по такой картинке

Пересечения есть, но не все.
Кроме того, Html5 относится к ряду новых API или новых спецификаций и новых технологий. Сам протокол Http имеет только версии 1.0 и 1.1 и не имеет прямого отношения к самому Html. .
С точки зрения непрофессионала, вы можете использовать HTTPпротоколПередавать не-Htmlданные, вот и все =. знак равно
Проще говоря,разные уровни.

2. Что за протокол Websocket и в чем его преимущества?
Прежде всего, Websocket — этоУпорствопротокол, в отличие от HTTP, которыйнепостоянныйсоглашения.
Давайте возьмем простой пример и объясним его на широко используемом жизненном цикле PHP.
1) Жизненный цикл HTTP определяется запросом, то есть запросом и ответом, затемсуществуетHTTP1.0середина, HTTP-запрос завершен.
В HTTP 1.1 были внесены улучшения, так что есть поддержка активности, то есть в HTTP-соединении можно отправлять несколько запросов и получать несколько ответов.
Но помни Request = Response , что всегда имеет место в HTTP, что означает, что запрос может иметь только один ответ. И этот ответ тожепассивныйДа, его нельзя инициировать активно.

Тренер, у тебя столько ББ, при чем тут Websocket?
_(:з"∠)_ Ну, я собирался сказать Websocket. .
Во-первых, Websocket основан на протоколе HTTP илизаниматьПротокол HTTP используется для завершения части рукопожатия.
то же самое в фазе рукопожатия
-------Далее речь идет о профессиональном и техническом контенте, если вы не хотите его читать, можете пропустить, лол:, или просто смотреть затемненный контент-------
Сначала давайте посмотрим на типичное рукопожатие Websocket (позаимствовано из Википедии..)
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
Дети, знакомые с HTTP, могли обнаружить, что в этом запросе рукопожатия есть несколько вещей, похожих на протокол HTTP.
Я объясню, как это работает.
Upgrade: websocket
Connection: Upgrade
Это ядро ​​Websocket, говорящее Apache, Nginx и другим серверам:Внимание, Ву инициировал протокол Websocket, поторопитесь и помогите мне найти соответствующего помощника для работы с ~ не старомодным HTTP.
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Во-первых, Sec-WebSocket-Key — это значение в кодировке Base64, которое случайным образом генерируется браузером и сообщает серверу:Торф, не валяй дурака, я хочу проверить, действительно ли Ни является помощником Websocket.
Затем Sec_WebSocket-Protocol — это определяемая пользователем строка, используемая для различения протоколов, требуемых различными службами по одному и тому же URL-адресу. Простое понимание:Я собираюсь подать А сегодня вечером, не ошибитесь~
Наконец, Sec-WebSocket-Version сообщает серверу, какой Websocket Draft (версия протокола) использовался. В стадии черновика есть всякие странные протоколы, и еще много странного и разного.Почему Firefox и Chrome не используют одну и ту же версию и т. д. В начале было слишком много протоколов Websocket, но это было большая проблема. . Но теперь все в порядке~ Это все используют~ Обезвоживание:Официант, я хочу 13-летнего →_→

Затем сервер вернет следующие вещи, указывающие на то, что запрос принят и веб-сокет успешно установлен!
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
Это последняя зона ответственности HTTP.Сообщите клиенту, что я успешно переключил протокол~
Upgrade: websocket
Connection: Upgrade

Все еще исправлено сообщение клиенту, что предстоящее обновление — это протокол Websocket, а не mozillasocket, lurnarsocket или shitsocket.
Затем Sec-WebSocket-Accept — это ключ Sec-WebSocket-Key, подтвержденный сервером и зашифрованный. сервер:Хорошо, хорошо, понял, позвольте мне показать вам мое удостоверение личности, чтобы доказать это. .
Последний, Sec-WebSocket-Protocol, является окончательным используемым протоколом.

До сих пор HTTP сделал всю свою работу, и следующим шагом будет полное следование протоколу Websocket.
Конкретный протокол здесь не описывается.
------------------Часть технического анализа завершена-------------------

Ваш TMD так долго был BBB, так что, черт возьми, использование Websocket, не может ли длинный опрос http или опрос ajax обеспечить передачу информации в реальном времени?

Хорошо, молодой человек, давайте поговорим об использовании Websocket.
Приходите и дайте вам немного Ху (Су) Луо (Дан) Бу (Красный)

3. Роль веб-сокета
Прежде чем говорить о Websocket, я, кстати, расскажу о длинном опросе. И принцип ajax polling.
Во-первых, это ajax-опрос. Принцип ajax-опроса очень прост: каждые несколько секунд браузер отправляет запрос на сервер, чтобы узнать, есть ли новая информация.
Воспроизведение сцены:
Клиент: ля-ля-ля, есть ли новая информация (Запрос)
Сервер: нет (Ответ)
Клиент: ля-ля-ля, есть ли новая информация (Запрос)
Сервер: Нет. . (Ответ)
Клиент: ля-ля-ля, есть ли новая информация (Запрос)
Сервер: Ты такой раздражающий, нет. . (Ответ)
Клиент: ля-ля-ля, есть новое сообщение (запрос)
Сервер: Хорошо, хорошо, вот и все. (Ответ)
Клиент: ля-ля-ля, есть новое сообщение (запрос)
Сервер:. . . . . Нет. . . . Нет. . . нет (ответ) ---- петля

long poll
По сути, принцип long poll аналогичен принципу ajax polling, оба используют метод polling, но принята модель блокировки (все время звонить и не вешать трубку, если вам не звонят), т. е. скажем, после того, как клиент инициирует соединение, если нет сообщения, он не вернул ответ клиенту. Он не возвращается, пока не будет сообщения.После возврата клиент снова устанавливает соединение, и цикл начинается снова и снова.
воспроизведение сцены
Клиент: ля-ля-ля, есть какая-то новая информация?
Сервер: угу. . Подождите, пока не будет новостей. . иди к тебе (Ответ)
Клиент: ля-ля-ля, есть какая-то новая информация? -петля

Из вышеизложенного видно, что на самом деле эти два метода постоянно устанавливают HTTP-соединения, а затем ждут обработки сервером, что может отражать еще одну особенность протокола HTTP.пассивность.
Что такое пассивность На самом деле сервер не может активно связываться с клиентом, только клиент может инициировать это.
Проще говоря, сервер - очень ленивый холодильник (это стебель) (не будет, не может активно инициировать соединение), а у начальника есть заказ. есть, вы должны получить его хорошо.

После разговора об этом поговорим о вышеперечисленных недостатках (простите мой бред, OAQ)
Из вышеизложенного нетрудно увидеть, что, несмотря ни на что, два вышеуказанных весьма ресурсоемки.
Опрос Ajax требует, чтобы сервер имел высокую скорость обработки и ресурсы. (скорость)
Длинный опрос требует высокой параллелизма, то есть возможности получать клиентов одновременно. (размер сайта)
Таким образом, это может произойти как с опросом ajax, так и с длинным опросом.

Клиент: Ла-ла-ла-ла, есть какая-то новая информация?
Сервер: месячная линия занята, повторите попытку позже (503 сервер недоступен)
Клиент: . . . . Ладно, ла-ла-ла, есть новая информация?
Сервер: месячная линия занята, повторите попытку позже (503 сервер недоступен)

Клиент:


Тогда сервер до смерти занят: холодильник, хочу еще холодильников! Более. . Более. . (Я был неправ.. это снова стебель..)

--------------------------
Ближе к дому поговорим о Websocket
Из приведенного выше примера мы видим, что ни один из этих двух способов не является лучшим и требует много ресурсов.
Нужно больше скорости, нужно больше «телефонов». И то, и другое приведет к все большему и большему спросу на «телефон».
Ах да, я забыл упомянуть, что HTTP по-прежнему является протоколом без сохранения состояния. (Спасибо всем в комментариях за указание на OAQ)
С точки зрения непрофессионала, поскольку сервер должен принимать слишком много клиентов каждый день, этозабывчивый призрак, как только вы кладете трубку, он забывает все ваши вещи и выбрасывает все ваши вещи. Вы должны сказать серверу еще раз во второй раз.

Так что в этом случае пришел, пришел Websocket.
Он решил несколько проблем HTTP.
первый,пассивность, когда сервер завершает обновление протокола (HTTP->Websocket), сервер может активно передавать информацию клиенту.
Таким образом, приведенный выше сценарий можно изменить следующим образом.
Клиент: Ла-Ла-Ла, хочу создать протокол Websocket, требуемый сервис: чат, версия протокола Websocket: 17 (запрос HTTP)
Сервер: в порядке, подтверждено, обновлен до протокола Websocket (протоколы HTTP переключены)
Клиент: Пожалуйста, сообщите мне, когда у вас будет информация. .
Сервер: ок, иногда он скажет вам.
Сервер: балабабалабалабала
Сервер: балабабалабалабала
Сервер: Хахахахахахахаха
Сервер: смеюсь до смерти хахахахахаха

Становится вот так, просто пройдиодин HTTP-запрос, может обеспечить устойчивый поток передачи информации. (В программировании такая конструкция называется обратным вызовом, то есть: вы будете уведомлять меня, когда у вас будет информация, вместо того, чтобы я дурачился и каждый раз спрашивал вас)
Такой протокол решает ситуацию, когда синхронизация выше задерживается и очень сильно потребляет ресурсы.
Так почему же он решает проблему потребления ресурсов на сервере?
Фактически используемая нами программа должна пройти через два слоя агентов, а именноПротокол HTTP анализируется такими серверами, как Nginx., а затем отправить его в соответствующийОбработчик (PHP и т.д.)обрабатывать.
Проще говоря, у нас очень быстрый пикапОбходчик (Nginx), он несет ответственность за передачу проблемы в соответствующееСлужба поддержки клиентов (Хендлер).
самОператор в принципе достаточно быстрый, но каждый раз застревает наСлужба поддержки клиентов (Хендлер)да, старыйобслуживание клиентовОбработка слишком медленная. , что приводит к недостаточному обслуживанию клиентов.
Websocket решает эту проблему, после установки вы можете напрямую установить связь с оператором.долгое соединение, когда есть информация, служба поддержки клиентов найдет способ уведомить оператора, а затемоператорВ унифицированной передаче заказчику.
Это может решить проблему слишком низкой скорости обработки обслуживания клиентов.

При этом традиционным способом необходимо непрерывно устанавливать и закрывать протокол HTTP.Поскольку HTTP является негосударственным, каждый разПовторно передать идентификационную информацию, чтобы сообщить серверу, кто вы.
Хоть оператор и очень быстрый, но каждый раз, когда им приходится слушать такую ​​кучу, эффективность тоже будет снижаться.При этом им приходится постоянно передавать информацию в службу поддержки, что не только тратит клиента оказание услугвремя обработки, а также будет потребляться при передаче по сетиЧрезмерный трафик/время.
Но Websocket нужен толькоРукопожатие HTTP, поэтому весь процесс связи устанавливается в соединении/состоянии, что позволяет избежать негосударственной природы HTTP, сервер всегда будет знать вашу информацию до тех пор, пока вы не закроете запрос, что решает проблему, связанную с тем, что оператору приходится многократно анализировать протокол HTTP и проверять подлинность информационная информация.
в то же время поКлиенты проявляют инициативу, чтобы спросить, который преобразуется вКогда у сервера (push) есть информация, она будет отправлена ​​(конечно, клиент все еще ждет, пока информация будет отправлена ​​активно...), когда нет информации, она будет передана оператору (Nginx), и скорость будет медленной, не занимая себя.Служба поддержки клиентов (Хендлер)охватывать
--------------------
Что касается того, как использовать Websocket на клиентах, которые не поддерживают Websocket. . ответ:не можем
Но это можно сделать с помощью упомянутого выше длинного опроса и ajax-опроса.имитировать аналогичный эффект
-----
_(:з"∠)_ за два дня написал две научно-популярные статьи. . Так устал OAQ, пожалуйста, как это. .
Да, если есть какие-либо ошибки, пожалуйста, оставьте сообщение и укажите его ниже ~