Реклама

Главная arrow Статьи arrow Для подготовленных arrow WebSockets входят в дом Opera

WebSockets входят в дом Opera

11.10.2010 | Gereford | Для подготовленных

Opera выпустила публичную сборку, поддерживающую WebSockets. WebSockets будет поддерживаться и в финальной версии Opera 10.70. WebSockets предоставляют возможность связи между сценариями внутри веб-страниц и сервера в режиме полного дуплекса с минимальной задержкой.

Ранее программисты экспериментировали с двунаправленной связью, используя XMLHttpRequest, что было очень медленно, так как каждый раз приходилось создавать новое TCP соединение для каждого сообщения. WebSockets устанавливает одно TCP соединение и подтверждает, что сервер может общаться с WebSocket, делая специальные проверки, после чего сервер и клиент могут отправлять текстовые сообщения через установленное соединение при необходимости, в результате чего связь становится быстрее.

Это позволяет программам и многопользовательским играм, взаимодействующим в реальном времени (например, Quake), запускаться непосредственно в браузере без плагинов и с хорошей производительностью.

Версии WebSocket

Opera поддерживает протокол версии -00 (аля -76). Точно так же, как и Chrome 6, Safari 5.02 и Firefox 4 beta. Старые версии Chrome и Safari поддерживали старые версии протокола, которые использовали различные проверки поддержки связи (версия -75). Текущая версия протокола (-02) имеет другую структуру, но поддержание связи такое же, как и в -00/-76. Были различные разговоры об изменении поддержки связи, также о возможности постоянного использования TLS с Next Protocol Negotiation. Были разговоры о поддержке мультиплексирования, разделении, сжатии и отправки двоичных данных. Это может означать, что в будущем протокол может измениться несовместимым образом. Однако, маловероятно что изменится WebSocket API.

Как использовать WebSockets

Для подключения к серверу WebSocket вы можете использовать следующую конструкцию WebSocket:

var ws = new WebSocket('ws://example.org:12345/demo');

Вы также можете запросить специфический субпротокол со вторым параметром:

var ws = new WebSocket('ws://example.org:12345/demo', 'my-chat-protocol');

Вы можете попробовать подключиться к любой машине на любой порт (за исключением тех, которые заблокированы), не смотря на то, что серверу непременно нужна поддержка WebSockets, ждать соединения со страницы, которая откроет соединение. Смыслом субпротокола является server-specific(специфический сервер).

Если соединение установлено, объект WebSocket отправляет событие 'open', именно в этот момент вы можете начать отправлять и принимать сообщения. Отправлять сообщения можно используя метод send() и обрабатывать входящие сообщения, используя обработчик события onmessage:

ws.onopen = function(e) {
  // Соединение установлено
  // Можно отправлять сообщения
  this.send('Hello!');
}
ws.onmessage = function(e) {
  // Получаем сообщение с сервера
  alert(e.data);
}

Если сервер разорвал соединение, или оно было закрыто по каким либо другим причинам, объект WebSocket получает событие 'close'.

ws.onclose = function(e) {
  alert('WebSocket закрыт :-(');
}

Вы также можете закрыть соединение, используя метод close().

ws.close();

Если сервер отправляет данные, которые браузер не понимает( это возможно, если сервер поддерживает только новую версию протокола), то вы получите событие 'error'. Если вы получили событие 'error' и события, не имеющие 'message', то вы можете закрыть соединение и попробовать использовать что-то еще.

Чтобы проверить, поддерживает ли браузер WebSockets, можно выполнить следующие действия:

if ('WebSocket' in window) {
  // WebSockets поддерживается
} else {
  // WebSockets не поддерживается
}

Вклад Opera

При реализации WebSockets в Opera разработчики также разработали так называемый testsuite, который охватывает как сам протокол, так и API, пытаясь проверить все аспекты спецификаций, включая обработку ошибок и непредвиденного поведения. При работе с WebSockets разработчики были очень педантичны - все должно быть сделано правильно. Они нашли большое количество багов и несоответствий в спецификациях. Отзыв об этом был отправлен рабочей группе, работающей со спецификациями.

Разработчикам было очень легко проверить и реализовать спецификации WebSocket. Наличие необходимых подробных алгоритмов вселило в них уверенность, что они все сделали правильно, что в свою очередь привело к лучшей совместимости между реализациями, ведь смысл заключается в том, чтобы все отвечало технически требованиям.

Вы можете проверить, поддерживает ли ваш браузер WebSockets и как хорошо он это делает, используя Opera's WebSockets testsuite. Для использования testsuite Вам необходимо его установить.

Заключение

WebSockets - это перспективная технология, которая позволит приложениям и играм поддерживать многопользовательское взаимодействие в реальном времени с хорошей производительностью в Web. API очень прост в использовании и вряд ли изменится. Однако, протокол пока еще не стабилен. Удачного WebSocket'инга!

« Пред.   След. »
Прочтите так же...
Joomla! Ukraine