Впрочем, написав в заголовке про отказ от 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-сервер.
Добавить комментарий