如何在 java spring websocket 中实现 ping pong

how to implement ping pong in java spring websocket

根据此处的文档 https://www.rfc-editor.org/rfc/rfc6455#page-37websocket 必须使用 pong.

响应 ping 请求

我已经实施 spring boot websocket 来处理来自客户端的 websocket 连接。

我实现了一个 websocket 客户端,它定期发送 ping frames

我在这里 发现我无法在 java 中处理 ping 消息。

我对此有疑问 -

  1. 我是否必须在 java spring-boot websocket 中处理这些 ping 请求?
  2. 如果是,我如何在 spring 引导应用程序中实现它并使用 pong 响应 ping 请求?

扩展 class TextWebSocketHandler 并在 handleTextMessage 方法中编写您的逻辑。如果您正在寻找更通用的方法,请查看 WebSocketHandler 界面。但正如 Antonioosss 所建议的那样,ping pong 已经在协议级别实现,用于检查连接是否仍然存在。

Should I have to handle these ping requests in java spring-boot websocket?

没有

服务器会自动回复pong

对于 Tomcat 参见

https://github.com/apache/tomcat85/blob/b21d02042c408053a1944b27c3196ec9be3db381/java/org/apache/tomcat/websocket/WsFrameBase.java#L348

https://github.com/apache/tomcat85/blob/b21d02042c408053a1944b27c3196ec9be3db381/java/org/apache/tomcat/websocket/WsFrameBase.java#L41-L42

码头

https://github.com/eclipse/jetty.project/blob/b0f34fec3f4156c6fb250132fe95a895e07fb5ae/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/AbstractEventDriver.java#L125-L143

ping 未在 spring websocket 处理程序(接收部分)中暴露

使用 jetty 可以获得 ping 通知(参见 org.eclipse.jetty.websocket.api.WebSocketPingPongListener

但是 spring-websocket 没有使用它。