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

bejyjqdl  于 2023-10-20  发布在  Java
关注(0)|答案(2)|浏览(403)

我试图从网络套接字客户端发送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()方法?我做错了什么?有什么想法?

ac1kyiln

ac1kyiln1#

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

7rfyedvj

7rfyedvj2#

目前没有主流浏览器支持ping或pong发送(既不定期也不按需使用一些JS函数),所以你使用的Chrome扩展可能会发送一些自定义文本消息,需要在服务器上进行自定义处理(文本消息帧和ping/pong消息帧有不同的操作码,告诉接收方(在你的情况下是java服务器)调用哪个OnMessage)。
然而,所有浏览器都将自动正确地响应一个有效的pong开箱即用的ping。因此,目前最好的选择是从您的服务器端发送ping。
如果你只需要keep-alives,你也可以从服务器发送pong,尽管你要记住,如果你发送一个未经请求的pong到一个发送ping的客户端(比如一个有这种能力的java客户端),它可能会被混淆,因为它是一个格式错误的pong。

相关问题