Как работает интерфейс веб-сокетов HTML5? - PullRequest
11 голосов
/ 20 сентября 2009

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

Ответы [ 4 ]

23 голосов
/ 26 июня 2011

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

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

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

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

7 голосов
/ 14 октября 2010

Это не 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 to TCP. Существует также версия wsproxy для C и Python, включенная в noVNC.

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

2 голосов
/ 20 сентября 2009

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

0 голосов
/ 10 февраля 2014

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

В HTML 5 WebSocket похож на телефон (двухсторонняя связь), а не на шутку. Протокол HTTP обновлен до протокола websocket. (wss:// from ws://) СЕРВЕР должен иметь возможность открывать дуплексный канал и, следовательно, СОГЛАСЕН с дуплексной связью. Пожалуйста, также перейдите по этой ссылке: http://www.html5rocks.com/en/tutorials/websockets/basics/

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...