-
Notifications
You must be signed in to change notification settings - Fork 0
WebSocket
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/
Реализация 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);
Одним из вариантов реализации является использование фреймворка jWebSocket.
Определение jWebSocket в Maven проекте
- Определяем jWebSocket Repository репозиторий в pom.xml
<repository> <id>googlecode</id> <name>jWebSocket Repository</name> <url>http://jwebsocket.googlecode.com/svn/repo</url> </repository>
- Прописываем зависимости в 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