Я читал о WebSockets, и мне интересно, почему браузер не может просто открыть тривиальное TCP-соединение и общаться с сервером, как и любое другое настольное приложение, И почему это сообщение возможно через websockets?
В чем принципиальная разница между WebSockets и чистым TCP?
Ответ 1
Легче общаться через TCP-сокеты, когда вы работаете на границе интрасети, поскольку вы, вероятно, имеете контроль над машинами в этой сети и можете открывать порты, подходящие для создания TCP-соединений.
В Интернете вы общаетесь с кем-то другим сервером на другом конце. Они крайне вряд ли будут иметь какой-либо старый сокет, открытый для соединений. Обычно у них будет только несколько стандартных, таких как порт 80 для HTTP или 443 для HTTPS. Таким образом, для связи с сервером вы обязаны подключаться с использованием одного из этих портов.
Учитывая, что это стандартные порты для веб-серверов, которые обычно говорят по протоколу HTTP, вы поэтому должны соответствовать протоколу HTTP, иначе сервер не будет с вами разговаривать. Цель веб-сокетов - дать вам возможность инициировать соединение через HTTP, но затем согласовать с использованием протокола веб-сокетов (при условии, что сервер способен это сделать), чтобы разрешить поток потока, похожий на "TCP-сокет".
Ответ 2
Веб-браузеры работают на уровне приложений, тогда как TCP работает на транспортном уровне. Как разработчик веб-приложений, проще отправлять сообщения по сети через прикладной уровень, а не необработанные байты на транспортном уровне.
В основе WebSockets лежит TCP, он просто абстрагирован для простоты.
Ответ 3
Websocket - это протокол прикладного уровня, а TCP - протокол транспортного уровня. На транспортном уровне у нас обычно есть протоколы TCP и UDP. Любое сообщение из прикладного уровня должно пройти через транспортный уровень для передачи на другой компьютер. Следовательно, websocket и tcp имеют отношение друг к другу и не могут быть сопоставимы.