Java websocket:如何从websocket客户端接收PongMessage并响应此消息

问题描述 投票:0回答:2

我正在尝试从网络套接字客户端发送 PongMessage 到服务器(你可能会说是心跳消息)。

在服务器中,我在一个带有

@ServerEndpoint
注释的类中编写了这样的方法:

@OnMessage
        public void onPong(PongMessage pongMessage, Session session) {

          LOGGER.log(Level.INFO, " -- Got Hit Yaay!! -- ");

                try {
                    session.getBasicRemote().sendText(PONG_RECEIVED);
                } catch (IOException e) {
                    e.printStackTrace();
                }

        }

PongMessage 根据 oracle 文档接受

ByteBuffer
。我尝试在服务器中生成字节缓冲区并从套接字客户端发送完全相同的生成字节缓冲区值。服务器仍然抛出异常,表示无法解码字符串

我无法击中

onPong() method
。客户端是否可以将
pongmessage
发送到 websocket 服务器以便调用 onPong() 方法?我在这里做错了什么?有任何想法吗 ?

java websocket java-ee-7 java-websocket
2个回答
1
投票

我发现了一篇旧的post,Ping/Pong 消息应该由浏览器处理。如果这仍然是正确的(我不确定),那么您应该转向“自定义”解决方案:不要使用 PongMessage。接收一些您定义的 JSON。


0
投票

目前没有主流浏览器支持 ping 或 pong 发送(既不是自动发送也不是按需使用某些 JS 函数),因此您使用的 Chrome 扩展可能会发送一些需要在服务器上进行自定义处理的自定义文本消息(文本消息帧和 ping/pong消息帧有不同的操作码,它们告诉接收者(在你的例子中是java服务器)要调用哪个

OnMessage
)。

所有浏览器都会自动正确响应带有开箱即用的有效 pong 的 ping。因此,目前最好的选择是从服务器端发送 ping。
如果您只需要保持活动状态,您也可以只从服务器发送 pong,但请记住,如果您将未经请求的 pong 发送到确实发送 ping 的客户端(例如具有此类功能的 java 客户端),它可能会感到困惑的是,这对他的 ping 来说是一个畸形的 pong。

© www.soinside.com 2019 - 2024. All rights reserved.