Spring WebSocket继承AbstractWebSocketHandler时如何正确处理Ping消息
Spring WebSocket继承AbstractWebSocketHandler时如何正确处理Ping消息
你好!我来帮你拆解下问题的根源,以及给出正确的处理方式~
首先,你看不到Received Ping from server日志的核心原因是:Spring的AbstractWebSocketHandler已经在内部对PingMessage做了专属分发逻辑,不会把Ping消息传递到你重写的handleMessage方法里。
正确处理Ping消息的姿势
AbstractWebSocketHandler本身就提供了handlePingMessage()方法(protected修饰,可能你之前没留意到),专门用来处理Ping消息,而且它的默认实现已经会自动回复Pong了!如果你需要自定义处理(比如打日志),直接重写这个方法就行,完全不用在handleMessage里做类型判断:
public class MyHandler extends AbstractWebSocketHandler { // 其他业务方法... @Override protected void handlePingMessage(WebSocketSession session, PingMessage pingMessage) throws Exception { log.info("Received Ping from server. Sending Pong."); // 调用父类方法自动回复Pong,也可以自行实现回复逻辑 super.handlePingMessage(session, pingMessage); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws Exception { String payload = textMessage.getPayload(); // 处理你的文本消息业务逻辑 } }
这样修改后,你就能正常看到Ping的日志输出,同时也能保证Pong消息被正确回复给服务器。
关于连接断开的错误说明
你遇到的Disconnected from websocket with code 1006 and reason "Unexpected Status of SSLEngineResult after an unwrap() operation"错误,和Ping消息处理没有关系!这是一个SSL/TLS传输层的异常,可能的诱因包括:
- 客户端与服务器的SSL/TLS版本不兼容(比如服务器启用了TLS 1.3,但客户端只支持到TLS 1.2)
- 客户端未信任服务器的SSL证书(比如自签名证书未添加到本地信任列表)
- 网络波动导致SSL层的数据传输中断
- 服务器端的SSL配置存在参数错误
你需要重点排查SSL相关的配置和环境问题,而不是纠结Ping消息的处理逻辑。
希望这些内容能帮到你!
备注:内容来源于stack exchange,提问作者Abubakr Shoaliev
相关产品推荐
相关产品推荐

