我试图从网络套接字客户端发送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()方法?我做错了什么?有什么想法?
2条答案
按热度按时间ac1kyiln1#
我发现了一个旧的post,Ping/Pong消息应该由浏览器处理。如果这仍然是真的(我不确定),那么你应该转向一个“自定义”解决方案:不要使用PongMessage。接收您定义的JSON。
7rfyedvj2#
目前没有主流浏览器支持ping或pong发送(既不定期也不按需使用一些JS函数),所以你使用的Chrome扩展可能会发送一些自定义文本消息,需要在服务器上进行自定义处理(文本消息帧和ping/pong消息帧有不同的操作码,告诉接收方(在你的情况下是java服务器)调用哪个
OnMessage
)。然而,所有浏览器都将自动正确地响应一个有效的pong开箱即用的ping。因此,目前最好的选择是从您的服务器端发送ping。
如果你只需要keep-alives,你也可以从服务器发送pong,尽管你要记住,如果你发送一个未经请求的pong到一个发送ping的客户端(比如一个有这种能力的java客户端),它可能会被混淆,因为它是一个格式错误的pong。