Как работает интерфейс веб-сокетов HTML5?

Я слышал о интерфейсе веб-сокетов в спецификации файла HTML из соответствующего вопроса здесь.
Это звучит очень многообещающе! Я не понимаю, как он работает, он все еще использует протокол HTTP и обходит его или работает как TCP-сокеты?

Ответ 1

Протокол Web Socket является протоколом, основанным на TCP, но он предназначен для перехода на HTTP. Существует также рукопожатие HTTP, которое просит сервер обновить протокол Web Sockets. Поэтому, если сервер поддерживает его, будет использоваться дуплексное TCP-соединение, в противном случае применяется HTTP и комета для этого.

Ответ 2

В некотором смысле, это как HTTP-запрос, так и обычный TCP-сокет.

Требуется подключение к веб-узлу с использованием обычного HTTP-запроса через TCP. Есть несколько отправленных заголовков, которые указывают на веб-сервер, что это запрашиваемый веб-узел, а не обычная страница, но в основном это просто запрос HTTP.

После того, как ответ отправлен с сервера, соединение будет обновлено. То есть TCP-соединение, которое используется для HTTP, было захвачено для более высокого вызова: двунаправленная передача данных в реальном времени.

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

Ответ 3

Это не HTTP, и это не просто TCP-сокеты. Он предназначен для получения низких накладных расходов на обычные соединения сокетов (AJAX/COMET очень высоки), но не жертвуя некоторыми принципами безопасности браузера, которые были разработаны за последние несколько лет.

Первоначальное рукопожатие WebSockets очень похоже на HTTP. Это упростит для существующих HTTP-прокси и веб-сервера поддержку входящих соединений WebSockets и сделает с ними что-то нужное (т.е. Перенаправляет их на реальный обработчик). Но после успешного рукопожатия (которое включает обмен и подтверждение информации о происхождении) соединение остается открытым и становится двунаправленным.

Каждый пакет данных (отправляется с сервера или с клиента) начинается с "\ x00" (нулевой байт), за которым следуют кодированные данные в формате UTF-8 и заканчивается символом "\ xff" (все байты).

Текущий проект стандарта находится здесь: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76

Вы также можете найти, что wsproxy, включенный в noVNC, полезен в качестве ссылки. wsproxy - это общий WebSockets для прокси-сервера TCP. Существует как C, так и версия python wsproxy, включенная в noVNC.

http://github.com/kanaka/noVNC/tree/master/utils/

Ответ 4

В такой ситуации роль сервера возникает, когда:

В HTML 5 WebSocket похож на fone (2-way comm.), а не walky-talky. Протокол HTTP обновлен до протокола websocket. (wss:// from ws://) SERVER должен иметь возможность открывать дуплексный канал и, следовательно, AGREE с дуплексной связью. Также пройдите по этой ссылке: http://www.html5rocks.com/en/tutorials/websockets/basics/

Спасибо.