You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:35:29