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

<p>я создаю веб-приложение, которое должно взаимодействовать с другим приложением, используя сокетные соединения. для меня это новая территория, поэтому я хочу быть уверен, что <a href="https://stackoverflow.com/questions/152457/what-is-the-difference-between-a-port-and-a-socket">сокеты</a> отличаются от <a href="https://stackoverflow.com/questions/4363899/making-moves-w-websockets-and-python-django-twisted">websockets</a> . кажется, что они только концептуально похожи. </p><p>на вопрос, потому что изначально я планировал использовать django в качестве основы для моего проекта, но в посте so, на который я ссылался выше, стало ясно, что веб-сокеты невозможны (или, по крайней мере, ненадежны, даже с чем-то как django-websockets) с использованием предпочтительной установки django (apache с mod\_wsgi). тем не менее, я нашел другие посты, которые случайно импортируют модуль сокетов python для чего-то такого простого, как <a href="https://stackoverflow.com/questions/4093999/how-to-use-django-to-get-the-name-for-the-host-server">захват имени сервера сервера</a> .</p><p>так: </p><ul> <li>они действительно разные?</li> <li>есть ли причина не использовать django для проекта, который основывается на установлении сокетных соединений с внешним сервером? </li> </ul>

<p>чтобы ответить на ваши вопросы.</p><ol> <li>хотя они достигают (в общем) похожих вещей, <strong>yes</strong>, они <strong>действительно</strong> отличаются. websockets обычно запускаются из браузеров, подключающихся к серверу приложений по протоколу, аналогичному <strong>http</strong>, который работает по <strong>tcp/ip</strong>. таким образом, они в первую очередь для веб-приложений, которые требуют постоянного подключения к своему серверу. с другой стороны, простые розетки являются более мощными и универсальными. они работают через <strong>tcp/ip</strong>, но не ограничиваются браузерами или протоколом <strong>http</strong>. они могут быть использованы для реализации любого вида связи.</li> <li>нет. нет причин.</li> </ol>

<p>веб-сокеты используют сокеты в своей реализации. веб-сокеты основаны на стандартном протоколе (теперь в окончательном вызове, но еще не окончательном), который определяет «рукопожатие» соединения и «кадр» сообщения. обе стороны проходят процедуру рукопожатия для взаимного принятия соединения, а затем используют стандартный формат сообщения («кадр») для передачи сообщений туда и обратно.</p><p>я разрабатываю фреймворк, который позволит вам напрямую связывать машину с машиной с установленным программным обеспечением. это может удовлетворить вашу цель. вы можете следить за моим блогом, если хотите: <a href="http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration\_26.html">http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration\_26.html</a> </p>

<p>вам придется использовать websockets (или <em>некоторый</em> аналогичный модуль протокола, например, поддерживаемый плагином flash), потому что обычное приложение браузера просто не может открыть чистый tcp сокет.</p><p>модуль <a href="http://socket.io/"><code>socket.io</code></a> , доступный для <a href="http://nodejs.org/"><code>node.js</code></a> , может сильно помочь, но учтите, что это <em>not</em> сам по себе чистый модуль websocket.</p><p>на самом деле это более общий коммуникационный модуль, который может запускать <em>поверх</em> различных других сетевых протоколов, включая websockets и flash-сокеты.</p><p>следовательно, если вы хотите использовать <code>socket.io</code> на стороне сервера, вы также должны использовать их клиентский код и объекты. вы не можете легко устанавливать необработанные <code>websocket</code> соединения с сервером <code>socket.io</code>, так как вам придется эмулировать их протокол сообщений.</p>

<p>websocket - это просто еще один протокол уровня приложения по протоколу tcp, такой же, как http.</p><p>некоторые фрагменты <spring in action 4>, цитируемые ниже, надеются, что они помогут вам лучше понять websocket.</p><blockquote> <p>в простейшей форме websocket - это<strong> <em>just</em> </strong>канал связи между двумя приложениями (не обязательно браузер участвует) ... связь websocket может использоваться между<strong> <em>любыми видами приложения</em> </strong>, но наиболее распространенным использованием websocket является облегчение связь между приложением сервера и приложением на основе браузера.</p> </blockquote>

<p>что касается вашего вопроса (б), имейте в виду, что спецификация websocket не была завершена. согласно <a href="http://dev.w3.org/html5/websockets/">w3c</a> :</p><blockquote> <p>разработчики должны знать, что эта спецификация не является стабильной.</p> </blockquote><p>лично я считаю, что websockets в настоящее время слишком кровоточит, чтобы использовать его в edge. хотя я, вероятно, найду их полезными через год или около того.</p>

<p>я виню имя «websocket». они разные во многих отношениях. единственная распространенная вещь, которую они сделали, - они оба общаются по сети.</p><p><code>sockets</code> в python - это просто библиотека реализации сокетов bsd, вы можете устанавливать соединения, связанные с tcp/ip. в то время как websocket опирается на существующий протокол http и «обновляет» соединение с протоколом websocket, поскольку нет простого способа установить дуплексное соединение в http.</p>