В чем принципиальная разница между WebSockets и чистым TCP? - PullRequest
149 голосов
/ 21 апреля 2010

Я читал о WebSockets , и мне интересно, почему браузер не может просто открыть тривиальное TCP-соединение и связаться с сервером, как любое другое настольное приложение. И почему это общение возможно через веб-сокеты?

Ответы [ 4 ]

237 голосов
/ 21 апреля 2010

Проще общаться через сокеты TCP, когда вы работаете в пределах границ интрасети, так как вы, вероятно, имеете контроль над машинами в этой сети и можете открывать порты, подходящие для установления соединений TCP.

ЗаИнтернет, вы общаетесь с чужим сервером на другом конце.Они крайне вряд ли имеют какие-либо старые розетки, открытые для соединений.Обычно у них будет только несколько стандартных, таких как порт 80 для HTTP или 443 для HTTPS.Итак, для связи с сервером вы обязаны подключиться через один из этих портов.

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

26 голосов
/ 27 ноября 2012

Веб-браузеры работают на прикладном уровне, тогда как TCP работает на транспортном уровне. Как разработчику веб-приложения, проще отправлять сообщения по сети через прикладной уровень, а не необработанные байты на транспортном уровне.

Базовые WebSockets - это TCP, он просто абстрагирован для простоты.

2 голосов
/ 11 марта 2019

Для простоты связь через веб-сокет осуществляется через TCP-порт № 80 (или 443 в случае соединений с шифрованием TLS), что полезно для тех сред, которые блокируют не-интернет-соединения с использованием firewall .

Хотите использовать существующий порт TCP или открыть новый порт TCP, который может быть заблокирован брандмауэром?

2 голосов
/ 27 января 2018

Websocket - это протокол прикладного уровня, а TCP - протокол транспортного уровня. На транспортном уровне у нас обычно есть протоколы TCP и UDP. Любое сообщение из прикладного уровня должно пройти через транспортный уровень для передачи на другой компьютер. Следовательно, websocket и tcp имеют отношение друг к другу и не могут быть сравнимы.

...