news 2026/7/2 0:16:58

学会理解以及使用WebSocket

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学会理解以及使用WebSocket

什么是WebSocket
这是一种基于TCP的全双工长连接通信协议(通常直接说是长连接),用于在客户端和服务端持续交换消息。(重点:客户端和服务端、持续交换)


在Spring中有着一个最基础的接口public interface WebSocketHandler,这是spring对WebSocket连接生命周期的最小抽象。
里面有五个接口:
建立连接后afterConnectionEstablished

这一步是在经历握手之后成功连接之后要做的事情,通常是记录会话(Session),初始化连接资源,启动心跳监测,打log等等。
然后就是接收到了消息,对消息进行处理handleMessage
handleMessage(WebSocketSession session, WebSocketMessage<?> message)
那么我们再看Spring的AbstractWebSocketHandler对handleMessage的写法,接收到的message其实是一个泛型。


(通常来说,这个泛型判断我们可以直接用这个抽象类的判断就好了)

再之后就是handleTransportError这个是出现传输异常,例如断网了,客户端异常关闭等情况发生时会进入这个方法。在进入这里的时候并不能保证一定会回调afterConnectionClosed方法的

afterConnectionClosed这个是长连接的生命周期终点,也就是结束关闭连接。这里通常清理、回收、清楚引用。

最后一个是supportsPartialMessages协议级能力声明,默认来说是false。如果是true,需要自己拼包
那么介绍完了Spring的WebSocket,我们应该怎么使用呢。
上面有提到AbstractWebSocketHandler这个抽象类,我们直接继承这个抽象类就好了,可以使用这个类中的handleMessage以及supportsPartialMessages。
当然,这个类中也只写了这两个方法供给我们使用。


而我们在这个类中只是实现基本的连接后要做的事情(例如心跳检测,存储会话。真正的需要做的事情由各个WebSocket自己实现)

连接关闭以及处理消息同理。
现在我们做一个测试

创建一个TestSocket继承MySocket。
我们真正的业务可以在接收消息处实现,例如我们需要接收某种文件,然后对文件处理就可以重写
这个方法(根据业务,文本就写text,二进制就Binary)。
也可以在连接之后,也就是afterConnectionEstablish这个方法中写,例如连接后给客户端发送一条消息,然后每几秒发送一次,是没有问题的。
当然,既然说到每几秒发送一次我们就很容易联想到定时任务。定时任务也是不错的方式。
最后就是最关键的配置了

路径为ws://<host>:<port>/testSocket的长连接就会被绑定到testSocket(红框标注部分)中,进入它的生命周期。
测试:

启动服务之后,我的端口为9999,那么我的请求路径就应该是

在api工具中我们可以看到我们连接成功,我们现在返回控制台看一下。

可以看到是打印了session的id以及连接成功的字样(可以换成log更好)


接下来测试发送消息

这就是一套正常的流程了
当然,我直接关闭掉api工具(也就是异常关闭),自然就会进入异常处理部分。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 17:37:46

测试社区资源:免费学习平台——软件测试从业者的技能升级指南

免费学习资源在测试领域的战略价值 在快速演进的软件测试行业&#xff0c;持续学习是职业发展的核心驱动力。据2025年全球测试行业报告&#xff0c;测试从业者平均每年需掌握2-3项新技术&#xff08;如AI驱动测试、DevOps集成&#xff09;。然而&#xff0c;付费培训成本高昂&…

作者头像 李华
网站建设 2026/7/1 21:55:48

上帝的指纹:深入浅出正态分布 (Normal Distribution)

如果你在街头随机采访 1000 个成年男性&#xff0c;测量他们的身高&#xff0c;然后把这些数据画成一张图&#xff0c;你会发现什么&#xff1f; 你会发现大多数人的身高都挤在中间&#xff08;比如 170cm 到 175cm 之间&#xff09;&#xff0c;特别高&#xff08;比如 2米以上…

作者头像 李华
网站建设 2026/6/26 8:51:08

2026 企业攻防演练实战指南:从热点解读到安全防线构建

2026 企业攻防演练实战指南&#xff1a;从热点解读到安全防线构建 在数字化转型深化的背景下&#xff0c;企业网络安全已进入 “实战对抗” 时代。2025 年国家级护网行动的全面升级、供应链攻击的常态化&#xff0c;让攻防演练成为企业检验安全能力的核心手段。 本文结合最新…

作者头像 李华
网站建设 2026/6/30 4:48:27

嵌入式现代C++:移动语义不是玄学,是资源转移的工程实践

嵌入式现代C&#xff1a;移动语义不是玄学&#xff0c;是资源转移的工程实践 假设你在写一个USB数据传输层&#xff0c;需要把一个4KB的DMA缓冲区从接收队列传递到处理线程。你可能会这样写&#xff1a; class DMABuffer {std::array<uint8_t, 4096> data;size_t length;…

作者头像 李华