javaxwebsocket处理ping消息

javaxwebsocket处理ping消息,java,websocket,ping,endpoint,pong,Java,Websocket,Ping,Endpoint,Pong,我在Glassfish 4上部署了一个websocket服务器。我试着打乒乓球。我的计划是定期从服务器向客户端发送ping,如果客户端没有回复,我将关闭conenction。不幸的是,似乎没有 @OnMessage public void onMessage(PingMessage pingMessage) 在javax.websocket.ClientEndpoint或ServerEndpoint中 或以任何其他方式响应ping消息。 出于一些非常奇怪的原因,当我在Eclipse中部署服务器

我在Glassfish 4上部署了一个websocket服务器。我试着打乒乓球。我的计划是定期从服务器向客户端发送ping,如果客户端没有回复,我将关闭conenction。不幸的是,似乎没有

@OnMessage
public void onMessage(PingMessage pingMessage)
在javax.websocket.ClientEndpoint或ServerEndpoint中

或以任何其他方式响应ping消息。
出于一些非常奇怪的原因,当我在Eclipse中部署服务器时,我会收到pong消息,尽管我从未在客户机中实现它。但是当我在服务器上使用glassfish maven插件部署它时,我再也不会收到任何PONG。

结果是服务器部分没有完全部署,这导致了ecplise和服务器之间的wierd差异。 但不管怎样,还是很奇怪,你不能自己处理ping消息。想象一下,你想处理它,或者用它来发送状态或其他东西

public void onMessage(PongMessage pongMessage)
               throws IOException

您确定Glassfish没有自己定期ping您的客户端吗?可能,但它不会返回任何有关与serverendpoint失去连接的信息。未关闭的会话保持活动状态:(好吧,事实上,你的处理程序中有实际的乒乓球……这很奇怪,我的意思是,它应该透明地处理它们。我似乎有点马虎。如果你想这样做,那就创建你自己的乒乓球消息。为什么要偏离规范,通过更改内置内容来破坏与备用客户端的向后兼容性。我很抱歉原因是它是一种低级机制,没有人认为你会对它做出反应。就像没有API可以在TCP级别做出反应来保持_的活动。唯一正确的处理方法是发送PONG,这是由容器完成的。发送状态通常应该在协议的应用程序级别上实现,而不是在内部实现一个传输层。问题是关于处理乒乓球,而不是乒乓球