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

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

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

Так:

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

5 ответов


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

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

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

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


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

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

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

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


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

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

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


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

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

лично я считаю, что Websockets слишком кровоточащий край для использования в настоящее время. Хотя, возможно, через год они мне пригодятся.