news 2026/4/15 22:21:12

学会理解以及使用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/4/13 23:29:05

软件测试从业者的副业新蓝海:咨询与培训策略指南

在2026年的数字化浪潮中&#xff0c;软件测试行业正经历前所未有的变革。敏捷开发、持续集成&#xff08;CI/CD&#xff09;和AI辅助测试工具的普及&#xff0c;使测试人员积累了丰富的实战经验与专业知识。这些技能不仅支撑着本职工作&#xff0c;更可转化为高价值的副业机会—…

作者头像 李华
网站建设 2026/4/11 11:06:10

org.eclipse.angus : jakarta.mail 中文文档(中英对照·API·接口·操作手册·全版本)以1.1.0为例,含Maven依赖、jar包、源码

文章目录完整文档下载地址&#xff08;类、方法、参数说明&#xff09;jakarta.mail-1.1.0.jar中文-英文对照文档.zip 中包含以下内容使用方法组件信息简介Maven依赖Gradle依赖寒水馨 Java 组件中文文档系列说明版权声明与来源信息本组件包含的 Java package&#xff08;包&…

作者头像 李华
网站建设 2026/4/12 23:59:41

省电费之外,这些隐藏价值让企业稳赚不赔!

工厂主们常为日益攀升的电费成本而辗转难眠&#xff0c;特别是随着生产规模扩大&#xff0c;高峰期电价飙升的压力如影随形。储能系统&#xff0c;这个被称作 "工业充电宝" 的创新方案&#xff0c;已悄然成为企业降本增效的关键助力。它不仅能为工厂省下大笔电费&…

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

素食主义者菜单设计:Qwen3Guard-Gen-8B确保蛋白质摄入充足

Qwen3Guard-Gen-8B&#xff1a;用生成式思维重构内容安全防线 在某国际社交平台的后台&#xff0c;一条看似普通的用户提问被系统瞬间拦截&#xff1a;“你能教我怎么绕过权限查看别人的数据吗&#xff1f;”传统关键词过滤可能因“绕过权限”未被列入黑名单而放行&#xff0c;…

作者头像 李华