Різниця між сокетом і вебсокетом?


178

Я будую веб-додаток, який потребує зв'язку з іншою програмою за допомогою з'єднань з сокетом. Це нова територія для мене, тому хочу бути впевненим, що розетки відрізняються від веб-розеток . Схоже, вони лише концептуально схожі.

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

Так:

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

Відповіді:


141

Щоб відповісти на ваші запитання.

  1. Навіть якщо вони досягають (в цілому) подібні речі, так , вони є на насправді різні. WebSockets, як правило, запускається від браузерів, що підключаються до сервера додатків через протокол, аналогічний HTTP, який працює через TCP / IP . Тому вони в першу чергу для веб-додатків, які потребують постійного підключення до його сервера. З іншого боку, прості розетки є більш потужними та загальними. Вони працюють через TCP / IP, але вони не обмежуються браузерами або протоколом HTTP . Їх можна було використовувати для здійснення будь-якого типу спілкування.
  2. Ні. Причин немає.

128
WebSockets не схожі на HTTP. Це звичайні розетки з деяким обрамленням і рукостисканням, сумісним із HTTP. HTTP-сумісне рукостискання - це лише те, щоб дозволити з'єднання WebSocket на тому самому порті, на якому працює веб-сервер (щоб веб-сервер міг їх переслати), але як тільки з'єднання встановлено, веб-сервер не знаходиться в циклі. WebSockets не обмежується клієнтами браузера. Див. Libwebsocket, у якому є клієнт, який не є браузером, і сервер.
канака

14
ГАРАЗД. Я бачу ... Оскільки я не можу видалити цю прийняту відповідь, я б просив вас відредагувати її з правильною інформацією. Дякую!
Пабло Санта-Крус

2
Ви можете створювати клієнтів веб-сокетів і використовувати їх поза браузерами. Протокол websocket - це HTTP 1.1 з оновленим з'єднанням до "websocket".
Roger F. Gay

2
@huggie nope. Існує невеликий фрагмент обрамлення: tools.ietf.org/html/rfc6455#section-5 (2 байти для невеликих повідомлень).
канака

2
@NiCkNewman - це, мабуть, хороший окремий питання насправді. Кадрова рамка мінімальна, і це не проблема. Проблема з WebSockets для мереж MMO двояка: це лише клієнтський сервер і це TCP (на основі потоку). Для гарної продуктивності роботи в MMO вам також потрібна пряма однорангова мережа, і вам потрібна дейтаграма (послідовна низька затримка важливіша, ніж отримання кожного пакета). Хороша новина полягає в тому, що WebRTC DataChannel має обидва ці властивості, тому він почне заповнювати прогалину і дозволить повноцінно грати AAA MMO в браузері.
канака

21

Веб-розетки використовують розетки при їх реалізації. Веб-розетки ґрунтуються на стандартному протоколі (зараз у заключному дзвінку, але ще не остаточному), який визначає з'єднання "рукостискання" та повідомлення "кадр". Обидві сторони проходять процедуру рукостискання, щоб взаємно прийняти з'єднання, а потім використовувати стандартний формат повідомлення ("кадр") для передачі повідомлень назад і назад.

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


11

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

Socket.IOМодуль для node.jsможе допомогти багато, але зверніть увагу , що це НЕ чистий модуль WebSocket в своєму власному праві.

Це насправді більш загальний комунікаційний модуль, який може працювати над іншими мережевими протоколами, включаючи WebSockets та Flash-розетки.

Отже, якщо ви хочете використовувати Socket.IOна сервері кінець, ви також повинні використовувати їх клієнтський код та об'єкти. Ви не можете легко встановити необмежене WebSocketз'єднання з socket.ioсервером, оскільки вам доведеться емулювати їх протокол повідомлень.


11

WebSocket - це ще один протокол рівня додатків через протокол TCP, як і HTTP.

Деякі фрагменти <Spring in Action 4> цитуються нижче, сподіваємось, що це допоможе вам краще зрозуміти WebSocket.

У своїй найпростішій формі WebSocket - це лише канал зв'язку між двома програмами (не обов’язково задіяний браузер) ... Зв'язок WebSocket може використовуватися між різними програмами , але найпоширенішим використанням WebSocket є полегшення зв'язку між серверний додаток і додаток на основі браузера.


2

Що стосується вашого питання (b), майте на увазі, що специфікація Websocket ще не була доопрацьована. Відповідно до W3C :

Виконавці повинні знати, що ця специфікація не є стабільною.

Особисто я вважаю, що веб-розетки є занадто кровоточивим краєм для використання в даний час. Хоча я, мабуть, знайду їх корисними через рік.


А що тепер, через 9 років?
Венрікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.