Web Sockets — TCP для веба

Впрочем, написав в заголовке про отказ от http, я покривил душой — естественно, технология организует взаимодействие поверх этого протокола. Просто работая с WebSockets, можно абстрагироваться от его обременительных особенностей.

В отличие от объекта XMLHttpRequest и основанного на нем обмена данными, WebSockets устанавливает только одно соединение. После необходимых проверок, подтверждающих, что сервер может работать с WebSocket, сервер и клиент могут отправлять через него текстовые сообщения, причем передача происходит сразу же, при отсылке — WebSockets создает двунаправленные, дуплексные каналы связи. Соединение постоянно держится открытым, что позволяет не передавать лишних HTTP-заголовков. При этом в веб-сокетах нет ограничений на количество соединений.

Взаимодействие по протоколу WebSocket на данный момент выглядит следующим образом.

Заголовок запроса браузера на установку соединения:

GET ws://echo. websocket. org/?encoding=text HTTP/1.1 Origin: Http://websocket. org

Cookie:__utma=99as

Connection: Upgrade Host: echo. websocket. org

Sec-WebSocket-Key: uRovscZjNol/umbTt5uKmw==

Upgrade: websocket Sec-WebSocket-Version: 13

Заголовок ответа сервера:

HTTP/1.1 101 WebSocket Protocol Handshake Date: Fri, 10 Feb 2012 17:38:18 GMT Connection: Upgrade Server: Kaazing Gateway Upgrade: WebSocket

Access-Control-Allow-Origin: Http://websocket. org Access-Control-Allow-Credentials: true Sec-WebSocket-Accept: rLHCkw/SKsO9GAH/ZSFhBATDKrU= Access-Control-Allow-Headers: content-type

Заголовок Sec-WebSocket-Accept формируется из строковых значений заголовка Sec-WebSocket-Key и специальной строки с использованием SHA-1 и Base64. По его значению и определяется, согласен ли сервер общаться по протоколу WebSockets.

Подробнее поля заголовков мы рассматривать не будем, в случае необходимости с ними можно ознакомиться в The WebSocket Protocol, который в декабре 2011 года обрел статус RFC (RFC 6455).

Для того чтобы начать работать с веб-сокетами, нужно всего две вещи — браузер, поддерживающий WebSocket, и сервер, реализующий эту технологию. Если с первым все, с некоторыми оговорками, хорошо, то второй пункт пока представляет из себя проблему. Пока воспользуемся публичным wv/wss echo-сервером, предоставляемым Http://websocket. org для демонстрации технологии. Разместите у себя на веб-сервере следующую страницу и откройте ее в браузере:

<html>

<head>

<script>

Var webSocket = new WebSocket("wss://echo. websocket. org");

WebSocket. onopen = function(event) { alert(‘onopen’);

WebSocket. send("Hello Web Socket!");

};

WebSocket. onmessage = function(event) { alert(‘onmessage, ‘ + event. data); webSocket. close():

};

WebSocket. onclose = function(event) { alert(‘onclose’);

};

WebSocket. send("Hello WebSockets!"); webSocket. close():

</script>

</head>

<body>

</body>

</html>

URL WebSocket начинается с обозначения протокола как ws: (или wss: при работе по Secure Sockets Layer). В данном примере мы устанавливаем связь с тестовым WebSoket-сервером, посылаем тестовое сообщение и получаем тестовый же ответ.

Я надеюсь, что все прошло успешно, и все подложенные окна сообщений вы увидели. Да, технология в принципе работает, но для дальнейших шагов нам понадобится реальный, а не демонстрационный ws-сервер.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *