Skip to content
qqq123 edited this page Nov 4, 2013 · 4 revisions

WebSocket - это расширение протокола http.

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

Особенности:

  • асинхронный и симметричный: Теперь уже нет клиента и сервера с фиксированными ролями, а есть два равноправных участника обмена данными. Каждый работает сам по себе, и когда надо отправляет данные другому. Отправил — и пошел дальше, ничего ждать не надо. Вторая сторона ответит, когда захочет — может не сразу, а может и вообще не ответит.
  • Имеет высокую скорость и эффективность передачи
  • В отличие от HTTP веб-сокеты не имеют ограничений на время жизни в неактивном состоянии. (не надо периодически обновлять соединение)
  • В HTTP предусмотрено ограничение на число одновременных открытых сессий к одному серверу. На WebSocket это не распространяется.

Чтобы установить соединение WebSocket, клиент и сервер обмениваются специальным подтверждением, основанным на протоколе HTTP. В случае успешного выполнения протокол прикладного уровня "обновляется" с HTTP до WebSocket, используя ранее установленное соединение TCP. После этого HTTP больше не задействован.

Поддержка браузерами:

В той или иной мере WebSocket поддерживается в следующих браузерах:

  • Google Chrome (начиная с версии 4.0.249.0);
  • Apple Safari (начиная с версии 5.0.7533.16);
  • Mozilla Firefox (начиная с версии 4);
  • Opera (начиная с версии 10.70 9067);
  • IE 10+;

Полная поддержка реализована в браузерах:

  • IE 10+
  • Chrome 16+
  • Firefox 11+
  • Opera 12.10+
  • Safari 6+

Проверить, поддерживает ли ваш браузер WebSocket, можно на сайте http://websocketstest.com/

Реализация WebSocket-ов на клиентской стороне:

Реализация API WebSocket в браузере осуществляется с помощью JavaScript

Протокол Web Socket определяет две URI схемы:

  • ws: (нешифрованное соединение)
  • wss: (шифрованное соединение).

Для открытия соединения достаточно создать объект WebSocket, указав в нём специальный протокол ws или wss:

var socket = new WebSocket("ws://myserver.com:8081/");

У объекта socket есть четыре коллбэка: один при получении данных и три — при изменениях в состоянии соединения:

socket.onopen = function() {
    alert("Соединение установлено.");
};

socket.onclose = function(event) {
  if (event.wasClean) {
    alert('Соединение закрыто чисто');
  } else {
    alert('Обрыв соединения'); // например, "убит" процесс сервера
  }
  alert('Код: ' + event.code + ' причина: ' + event.reason);
};

socket.onmessage = function(event) {
  alert("Получены данные: " + event.data);
};

socket.onerror = function(error) {
  alert("Ошибка " + error.message);
};       

Для посылки данных используется метод socket.send(data). Пересылать можно любые данные. Например, строку: socket.send("Привет"); …Или файл, выбранный в форме: socket.send(form.elements[0].file);

Реализация WebSocket-ов на серверной стороне (jWebSocket)

Одним из вариантов реализации является использование фреймворка jWebSocket.

Определение jWebSocket в Maven проекте

  1. Определяем jWebSocket Repository репозиторий в pom.xml
 <repository>
 <id>googlecode</id>
 <name>jWebSocket Repository</name>
 <url>http://jwebsocket.googlecode.com/svn/repo</url>
 </repository>    
  1. Прописываем зависимости в pom.xml
 <dependency>
    <groupId>org.jwebsocket</groupId>
    <artifactId>jWebSocketServerAPI</artifactId>
    <version>1.0</version>
 </dependency>
 <dependency>
    <groupId>org.jwebsocket</groupId>
    <artifactId>jWebSocketServer</artifactId>
    <version>1.0</version>
 </dependency>    

Документацию по jWebSocket можно найти здесь: http://jwebsocket.org/documentation