В настоящее время я работаю с эталонной реализацией Tyrus API Java Websocket. Я успешно создал конечную точку сервера, которая получает двоичные сообщения, текстовые сообщения и сообщения pong, но я застрял, пытаясь заставить ее получать сообщения ping. Я просмотрел большую часть исходного кода Tyrus и прочитал учебник Jave EE Websocket, но не продемонстрировал функциональность для получения пингов (только для их отправки). Кто-нибудь знает, возможно ли это с текущим API? Если нет, не могли бы вы указать мне правильное направление для получения сообщений ping?
Получение эхо-запросов с помощью Java EE Websocket API
Ответы (1)
Вы не можете обрабатывать сообщения ping. В спецификации JSR 356 (Java API для WebSocket) указано, что реализация должна всегда отвечать на ping, не давая приложению возможности взаимодействовать с этими запросами.
Вы можете только отправлять пинги и потреблять понги:
@OnMessage
public void onPong(PongMessage pongMessage) {
//...
}
Почему вы хотите это сделать?
person
Pavel Bucek
schedule
26.06.2014
Ну, я пытаюсь сделать прокси-сервер websocket. Один из клиентов, которых я хочу подключить к моему прокси-серверу, регулярно отправляет эхо-запросы для проверки состояния подключения. Я заметил, что вы разработчик Tyrus. Как вы думаете, насколько сложно будет взломать библиотеку, чтобы поставить хук для моего приложения. Кстати, спасибо за ваш ответ!
- person 11th Hour Worker; 27.06.2014
интересный вариант использования... и нет, это не должно быть сложно сделать; Я думаю, что трудная часть будет состоять в том, чтобы выполнить рукопожатие и правильно передать информацию исходному клиенту, когда что-то пойдет не так ... и если вы хотите передать заголовки ответов на обновление обратно клиенту - это будет сложно. В противном случае все должно быть в порядке. Мы могли бы даже перенести ваши изменения в Tyrus, если вы сделаете свою функцию настраиваемой.
- person Pavel Bucek; 27.06.2014
@ pavel-bucek ты решил эту проблему? Я также наткнулся на эту отсутствующую функцию, но я не уверен, что она была решена за это время. (Не используя Tyrus, но используя JBoss WebSocket API в Undertow)
- person Dennis Laumen; 28.12.2016
@DennisLaumen С тех пор я пошел дальше, но могу сказать, что мне потребовалось всего 2 дня, чтобы взломать Tyrus и использовать мою собственную внутреннюю сборку Tyrus, чтобы заставить работать WebSockets. Очевидно, что это не идеально, но все другие реализации WebSockets в то время также не имели этой функции, поэтому я справился.
- person 11th Hour Worker; 29.12.2016
@2300Worker, спасибо за ответ спустя столько лет ;-). В настоящее время я использую альтернативное решение для поддержания жизни, которое у нас уже было в основном на месте. Использование пингов — это оптимизация, которая пока не обязательна, но может появиться в будущем.
- person Dennis Laumen; 29.12.2016