<f:websocket channel="someChannel"
user="#{someLoggedInUser.id}" ... />
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
По умолчанию веб-сокет находится в области видимости приложения. Например, любое представление или сессия в веб-приложении, в котором открыт один и тот же канал веб-сокета, получит одно и то же push-сообщение. Push-сообщение может быть отправлено любым пользователем и приложением. Чтобы ограничить push-сообщения всеми представлениями только в текущей сессии пользователя, установите для необязательного атрибута scope значение session
. В этом случае push-сообщение может отправлять только пользователь, а не приложение.
<f:websocket channel="someChannel" scope="session" … />
Чтобы ограничить push-сообщения только текущим представлением, вы можете установить для атрибута scope значение view
. Push-сообщение не будет отображаться в других представлениях той же сессии, даже если оно имеет тот же URL. Это push-сообщение может отправлять только пользователь, а не приложение.
<f:websocket channel="someChannel" scope="view" … />
Атрибут scope не может быть выражением EL.
Кроме того, вы можете установить необязательный атрибут user
для уникального идентификатора вошедшего в систему пользователя, обычно это имя для входа или идентификатор пользователя. Таким образом, push-сообщение может быть предназначено для конкретного пользователя, а также может отправляться другими пользователями и приложением. Значение атрибута user
должно реализовывать Serializable
и иметь небольшой объём памяти, поэтому не рекомендуется использовать весь объект пользователя.
Например, когда вы используете управляемую контейнером аутентификацию, фреймворк или библиотеку:
<f:websocket channel="someChannel"user="#{request.remoteUser}" … />
Или, когда у вас есть пользователь, доступный через EL, например, #{someLoggedInUser}
, который имеет свойство id
, представляющее его идентификатор:
<f:websocket channel="someChannel"
user="#{someLoggedInUser.id}" ... />
Когда указан атрибут user
, область видимости по умолчанию равна session
и не может быть установлена в application
.
На стороне сервера push-сообщение может быть предназначено для пользователя, указанного в атрибуте user
с помощью PushContext.send(Object, Serializable)
. Push-сообщение может быть отправлено любым пользователем и приложением.
@Inject @Push
private PushContext someChannel;
public void sendMessage(Object message, User recipientUser) {
Long recipientUserId = recipientUser.getId();
someChannel.send(message, recipientUserId);
}
Получателями могут быть несколько пользователей путём передачи Collection
, содержащего идентификаторы пользователей, в PushContext.send(Object, Collection)
.
public void sendMessage(Object message, Group recipientGroup) {
Collection<Long> recipientUserIds = recipientGroup.getUserIds();
someChannel.send(message, recipientUserIds);
}
Назад | Вперёд | Содержание |