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

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

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

Итак:

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

Ответ 1

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

  • Даже если они достигают (в общем) похожих вещей, да, они действительно разные. WebSockets обычно запускаются из браузеров, подключающихся к Application Server по протоколу, похожем на HTTP, который работает с TCP/IP. Таким образом, они в основном предназначены для веб-приложений, для которых требуется постоянное подключение к серверу. С другой стороны, простые сокеты более мощные и универсальные. Они превышают TCP/IP, но они не ограничены браузерами или протоколом HTTP. Они могут использоваться для осуществления любого вида связи.
  • Нет. Нет причин.

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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