Разница между сокетом и веб-сокетом? - PullRequest
134 голосов
/ 11 февраля 2011

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

Спросив, потому что изначально я планировал использовать Django в качестве основы для моего проекта, но в посте SO, на который я ссылался выше, было очень ясно, что веб-сокеты невозможны (или, по крайней мере, ненадежны, даже с чем-то вроде django-websockets) с использованием предпочтительной установки Django (Apache с mod_wsgi). Тем не менее, я нашел другие посты, которые случайно импортируют модуль сокетов Python для чего-то простого: захват имени сервера .

Итак:

  • Они действительно разные?
  • Есть ли причина не использовать Django для проекта, который основывается на установлении соединений через сокеты с внешним сервером?

Ответы [ 6 ]

103 голосов
/ 11 февраля 2011

Чтобы ответить на ваши вопросы.

  1. Несмотря на то, что они достигают (в общем) подобных вещей, да , они действительно действительно разные.WebSockets обычно запускаются из браузеров, подключающихся к Серверу приложений по протоколу, подобному HTTP , который работает по TCP / IP .Таким образом, они в первую очередь для веб-приложений, которые требуют постоянного подключения к своему серверу.С другой стороны, простые розетки более мощные и универсальные.Они работают по TCP / IP , но не ограничиваются браузерами или HTTP протоколом.Они могут быть использованы для реализации любого вида связи.
  2. Нет.Нет причин.
14 голосов
/ 29 сентября 2011

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

Я разрабатываю среду, которая позволит вам напрямую связывать машину с машиной с установленным программным обеспечением. Это может удовлетворить вашу цель. Вы можете следить за моим блогом, если хотите: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html

9 голосов
/ 11 февраля 2011

Вы должны будете использовать WebSockets (или некоторый аналогичный модуль протокола, например, поддерживаемый плагином Flash), потому что обычное приложение браузера просто не может открыть чистый сокет TCP.

Модуль Socket.IO, доступный для node.js, может сильно помочь, но учтите, что он не сам по себе чистый модуль WebSocket.

На самом деле это более общий коммуникационный модуль, который может запускать поверх различных других сетевых протоколов, включая WebSockets и Flash-сокеты.

Следовательно, если вы хотите использовать Socket.IO на стороне сервера вы также должны использовать их клиентский код и объекты.Вы не можете легко установить необработанные WebSocket соединения с socket.io сервером, так как вам придется эмулировать их протокол сообщений.

6 голосов
/ 10 ноября 2015

WebSocket - это просто еще один протокол прикладного уровня по протоколу TCP, такой же, как HTTP.

Некоторые фрагменты приведены ниже, надеюсь, они помогут вам лучше понять WebSocket.

В простейшем виде WebSocket - это просто канал связи между двумя приложениями (не обязательно браузер участвует) ... Связь WebSocket может использоваться между любыми видами приложения , но наиболее распространенным использованием WebSocket является облегчение связь между серверным приложением и приложением на основе браузера.

2 голосов
/ 12 февраля 2011

Относительно вашего вопроса (б), имейте в виду, что спецификация Websocket не была завершена. Согласно W3C :

Разработчики должны знать, что эта спецификация нестабильна.

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

0 голосов
/ 17 октября 2018

Я виню имя «WebSocket». Они разные во многих отношениях. Единственное, что они сделали, - они оба общаются по сети.

sockets в python - это просто библиотека реализации сокетов BSD, вы можете устанавливать соединения, связанные с TCP / IP. В то время как WebSocket основывается на существующем протоколе HTTP и «обновляет» соединение с протоколом WebSocket, поскольку нет простого способа установить дуплексное соединение в HTTP.

...