it-swarm-ru.tech

Разница между сокетом и веб-сокетом?

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

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

Так: 

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

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

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

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

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

13
Roger F. Gay

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

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

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

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

9
Alnitak

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

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

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

4
smwikipedia

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

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

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

2
Phil Hunt

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

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

0
Teng-Jing Wang