Получение эхо-запросов с помощью Java EE Websocket API

В настоящее время я работаю с эталонной реализацией Tyrus API Java Websocket. Я успешно создал конечную точку сервера, которая получает двоичные сообщения, текстовые сообщения и сообщения pong, но я застрял, пытаясь заставить ее получать сообщения ping. Я просмотрел большую часть исходного кода Tyrus и прочитал учебник Jave EE Websocket, но не продемонстрировал функциональность для получения пингов (только для их отправки). Кто-нибудь знает, возможно ли это с текущим API? Если нет, не могли бы вы указать мне правильное направление для получения сообщений ping?


person 11th Hour Worker    schedule 25.06.2014    source источник


Ответы (1)


Вы не можете обрабатывать сообщения ping. В спецификации JSR 356 (Java API для WebSocket) указано, что реализация должна всегда отвечать на ping, не давая приложению возможности взаимодействовать с этими запросами.

Вы можете только отправлять пинги и потреблять понги:

@OnMessage
public void onPong(PongMessage pongMessage) {
    //...
}

Почему вы хотите это сделать?

person Pavel Bucek    schedule 26.06.2014
comment
Ну, я пытаюсь сделать прокси-сервер websocket. Один из клиентов, которых я хочу подключить к моему прокси-серверу, регулярно отправляет эхо-запросы для проверки состояния подключения. Я заметил, что вы разработчик Tyrus. Как вы думаете, насколько сложно будет взломать библиотеку, чтобы поставить хук для моего приложения. Кстати, спасибо за ваш ответ! - person 11th Hour Worker; 27.06.2014
comment
интересный вариант использования... и нет, это не должно быть сложно сделать; Я думаю, что трудная часть будет состоять в том, чтобы выполнить рукопожатие и правильно передать информацию исходному клиенту, когда что-то пойдет не так ... и если вы хотите передать заголовки ответов на обновление обратно клиенту - это будет сложно. В противном случае все должно быть в порядке. Мы могли бы даже перенести ваши изменения в Tyrus, если вы сделаете свою функцию настраиваемой. - person Pavel Bucek; 27.06.2014
comment
@ pavel-bucek ты решил эту проблему? Я также наткнулся на эту отсутствующую функцию, но я не уверен, что она была решена за это время. (Не используя Tyrus, но используя JBoss WebSocket API в Undertow) - person Dennis Laumen; 28.12.2016
comment
@DennisLaumen С тех пор я пошел дальше, но могу сказать, что мне потребовалось всего 2 дня, чтобы взломать Tyrus и использовать мою собственную внутреннюю сборку Tyrus, чтобы заставить работать WebSockets. Очевидно, что это не идеально, но все другие реализации WebSockets в то время также не имели этой функции, поэтому я справился. - person 11th Hour Worker; 29.12.2016
comment
@2300Worker, спасибо за ответ спустя столько лет ;-). В настоящее время я использую альтернативное решение для поддержания жизни, которое у нас уже было в основном на месте. Использование пингов — это оптимизация, которая пока не обязательна, но может появиться в будущем. - person Dennis Laumen; 29.12.2016