javax Websocket обрабатывает сообщения ping

У меня есть сервер websocket, развернутый на Glassfish 4. Я пытаюсь использовать пинг / понг. Мой план состоит в том, чтобы периодически отправлять пинги с сервера клиентам, и если они не вернутся, я хочу закрыть соединение. К сожалению, кажется, не существует

@OnMessage
public void onMessage(PingMessage pingMessage)

внутри javax.websocket.ClientEndpoint или ServerEndpoint.

Или любой другой способ реагировать на сообщения ping. По очень странным причинам, когда я развертываю сервер внутри Eclipse, я получаю сообщения pong, хотя я никогда не реализовывал его внутри клиента. Но когда я развертываю его с помощью плагина Glassfish maven на моем сервере, я больше не получаю никаких понгов.


person ThommyH    schedule 25.06.2014    source источник
comment
Вы уверены, что Glassfish сама по себе периодически не пингует ваших клиентов?   -  person vtortola    schedule 25.06.2014
comment
возможно, но он не возвращает никакой информации о потерянных соединениях с серверной конечной точкой. незакрытые сеансы остаются в живых :(   -  person ThommyH    schedule 26.06.2014
comment
Ну, и тот факт, что вы получаете настоящие понги в свой хендлер ... довольно странно, я имею в виду, он должен обрабатывать их прозрачно. Я выгляжу немного неряшливо.   -  person vtortola    schedule 26.06.2014


Ответы (2)


Оказалось, что серверная часть не была полностью развернута, что привело к странной разнице между ecplise и сервером. Но все равно странно, что вы не можете самостоятельно обрабатывать сообщения ping. Представьте, что вы хотите обработать это или использовать его для отправки статуса или чего-то еще ...

person ThommyH    schedule 01.07.2014
comment
Если вы хотите сделать это, создайте свои собственные сообщения для пинг-понга. Зачем отклоняться от спецификации и нарушать обратную совместимость с альтернативными клиентами, изменяя то, что встроено. - person Martin Konecny; 11.08.2015
comment
Я предполагаю, что причина в том, что это настолько низкоуровневый механизм, что никто не думал, что вы захотите на него отреагировать. так же, как нет API, реагирующего на KEEP_ALIVE на уровне TCP. Единственный правильный способ справиться с этим - отправить PONG, который выполняется контейнером. Статус отправки должен быть реализован на прикладном уровне протокола в целом, а не на транспортном уровне. - person morgwai; 23.12.2020

public void onMessage(PongMessage pongMessage)
               throws IOException

https://tyrus.java.net/apidocs/1.4/org/glassfish/tyrus/ext/client/cli/ClientCli.ClientEndpoint.html.

person small_ticket    schedule 22.08.2014
comment
вопрос касался обработки PING, а не PONG - person morgwai; 23.12.2020