如何在java spring websocket中实现ping pong

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

根据https://tools.ietf.org/html/rfc6455#page-37的文档,websocket必须回应pingpong请求。

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

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

我在https://stackoverflow.com/a/24438328发现它无法在java中处理ping消息。

我对此有疑问 -

  1. 我应该在ping处理这些java spring-boot websocket请求吗?
  2. 如果是的话我怎么能在spring boot应用程序中实现它并用ping响应pong请求?
java spring-boot websocket ping spring-websocket
2个回答
0
投票

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


2
投票

我应该在java spring-boot websocket中处理这些ping请求吗?

没有

服务器将自动回复乒乓。

对于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不会暴露在弹簧websocket处理程序中(接收部分)

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

但它并没有被spring-websocket使用。

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