Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Конфигурирование веб-сокетов

Чтобы настроить веб-сокеты для использования в веб-приложениях JSF, сначала включите конечную точку веб-сокета, используя контекстный параметр в web.xml:

<context-param>
<param-name>javax.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name>
<param-value>true</param-value>
</context-param>

Если ваш сервер настроен для запуска контейнера веб-сокетов на порте TCP, отличном от контейнера HTTP, вы можете использовать необязательный целочисленный контекстный параметр javax.faces.WEBSOCKET_ENDPOINT_PORT чтобы явно указать порт:

<context-param>
<param-name>javax.faces.WEBSOCKET_ENDPOINT_PORT</param-name>
<param-value>8000</param-value>
</context-param>

Использование веб-сокета на стороне клиента

Объявите тег f:websocket в представлении JSF с именем канала и функцией JavaScript слушателя onmessage.

Следующий пример ссылается на существующую функцию слушателя JavaScript:

<f:websocket channel="someChannel"
onmessage="someWebsocketListener" />

function someWebsocketListener(message, channel, event) {
  console.log(message);
}

В этом примере объявляется встроенная функция слушателя JavaScript:

<f:websocket channel="someChannel"
onmessage="function(m){console.log(m);}" />

Функция слушателя JavaScript onmessage вызывается с тремя аргументами:

  • message: push-сообщение как объект JSON

  • channel: название канала

  • event: объект MessageEvent

При успешном подключении веб-сокет открывается по умолчанию до тех пор, пока документ открыт, и он будет автоматически переподключаться с увеличивающимися интервалами, когда соединение закрыто или прервано, в результате таких событий, как ошибка сети или перезагрузка сервера. Он не будет автоматически переподключён, если первая попытка подключения не удалась. Веб-сокет будет неявно закрыт после выгрузки документа.

Использование веб-сокетов на стороне сервера

В коде Java инъецируйте PushContext используя аннотацию @Push на заданном канале в любом Managed-бине CDI, таком как @Named или @WebServlet, куда вы хотите отправить push-сообщение. Затем вызовите PushContext.send(Object) с любым объектом Java, представляющим push-сообщение.

Например:

@Inject @Push
private PushContext someChannel;
public void sendMessage(Object message) {
someChannel.send(message);
}

По умолчанию имя канала берётся из имени переменной, в которую происходит инъецирование.

При желании имя канала можно указать с помощью атрибута channel. В следующем примере контекст вставки для имени канала foo инъецируется в переменную bar.

@Inject @Push(channel="foo") private PushContext bar;

Объект сообщения будет закодирован как JSON и доставлен в качестве аргумента сообщения функции слушателя JavaScript onmessage, связанной с именем канала. Это может быть строка, коллекция, отображение (Map) или JavaBean.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)