У меня вопрос по поводу этих трех протоколов передачи данных в Интернете. Я знаю , что сокеты TCP/IP — это форма низкоуровневой связи, которая использует транспортный уровень для выполнения передачи данных и очень хорошо справляется с этим.
Но WebSockets и HTTP Request , я понимаю, что они построены на прикладном уровне, и из примеров, которые я видел, оба очень похожи с точки зрения их формы.
Я не ошибаюсь? Являются ли WebSockets усовершенствованием HTTP-запроса или это одно и то же? В каких случаях лучше использовать WebSockets, чем HTTP-запрос?
Проще говоря: TCP-сокеты — это соединения очень низкого уровня. Вы можете видеть это как физическое соединение между двумя компьютерами. Когда вы устанавливаете сокет TCP, вы можете отправлять и получать данные синхронно или асинхронно, в зависимости от протокола, который вы используете с этого момента.
HTTP — это синхронный протокол, который работает по протоколу TCP. Запрос HTTP выполняется через сокет TCP (и ответ передается через тот же сокет).
Веб-сокеты — это протокол, работающий по протоколу HTTP. Соединение через веб-сокет выполняется через сокет TCP, изначально используя протокол HTTP.
Сокеты TCP/ IP делают возможной архитектуру клиент-сервер, хотя они этим не ограничиваются. Они фактически участвуют во всех видах связи, поскольку являются механизмом доставки пакетов данных между компьютерами.
Таким образом, имея IP-адреса и порты, вы все равно можете выбрать, какой транспортный протокол вы хотите использовать. Транспортным протоколом может быть любой из протоколов, принадлежащих транспортному уровню или уровню 4. TCP расположен на этом уровне, а IP-протокол — на уровне 31 . Как видите, все это находится на очень низком уровне, поскольку HTTP находится на уровне 7, прикладном уровне, значительно выше сокетов.
По сути, вы не можете сравнивать HTTP-запросы с сокетами, поскольку первый является специализацией последнего.
Что касается запросов HTTP и Websocket , то оба они могут быть выполнены с использованием протокола HTTP, но это разные протоколы 2 .
Одна из причин, по которой это было выбрано, заключается в том, что прокси-серверы обычно блокируют все, что не передается через порт 80, порт по умолчанию, используемый HTTP. Когда клиент (или обычно браузер) обнаруживает наличие прокси-сервера, он использует метод HTTP CONNECT для создания постоянного соединения, в противном случае он использует
ws://
илиwss://
для подключения к серверу. Соединения сws://
иwss://
устанавливаются на порт 80 и 443 соответственно, точно такой же порт какhttp://
иhttps://
Веб-сокеты необходимы, поскольку протокол http с самого начала был разработан для того, чтобы не сохранять состояние между запросами (он не имеет состояния). Что это значит? Когда вы делаете запрос на сервер и сразу же отправляете другой, он не может понять, что они связаны. Файлы cookie, javascript и код обычно используются на сервере, чтобы он понимал, какая информация связана, но сам протокол http не имеет к этому никакого отношения. Это просто требует, чтобы каждый запрос был самодостаточным, чтобы сервер мог ответить на него, идентифицируя только каждую пару «запрос/ответ». Это одна из самых сильных сторон протокола, поскольку она позволила создать несколько форм связи клиент-сервер, таких как REST и SOAP .очень отличаются друг от друга.
Некоторые виды связи, такие как чат, требуют, чтобы источник всегда был одним и тем же, и можно было узнать, например, было ли соединение потеряно или изменилось его состояние. Глядя на предыдущие условия протокола, добиться этого немного сложно (хотя и не невозможно) и, следовательно, необходим такой протокол, как веб-сокеты, чтобы иметь возможность установить стабильный коммуникационный туннель между двумя сторонами. Имейте в виду, что для установления связи обе стороны должны поддерживать веб-сокеты , поэтому большинство фреймворков сегодня допускают откат HTTP-запросов, если веб-сокет не поддерживается.
Некоторые способы замены веб-сокетов HTTP-запросами включают
События, отправленные сервером : в основном HTTP-запрос, который не завершается и в котором обе стороны отправляют информацию (поскольку ответная часть заканчивается только при закрытии соединения).
Длинный пул : метод, при котором запросы/ответы постоянно отправляются через равные промежутки времени, чтобы обе стороны обновляли состояние соединения и передавали сообщения друг другу. Если одна из сторон перестает отвечать, соединение считается потерянным.
Comet : набор методов, позволяющих поддерживать стабильное соединение с использованием технологии PUSH и других методов http.
Также читайте Что такое длинные опросы, сервер веб-сокетов отправляет события sse и comet
Некоторые фреймворки, реализующие веб-сокеты:
Примечание. Форма сетевого протокола может быть настолько разнообразной, что был изобретен IP поверх почтовых голубей , который определен в rfc2549 : P