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/15 16:49:41

API自动化:淘宝评价管理工具的技术实现

淘宝评价管理是商家维护口碑的重要环节&#xff0c;通过API自动化可以实现高效的评价监控、回复及数据分析。以下是技术实现的关键点&#xff1a;淘宝开放平台API接入申请淘宝开放平台的开发者账号&#xff0c;创建应用获取App Key和App Secret。评价相关API包括&#xff1a;ta…

作者头像 李华
网站建设 2026/4/15 16:45:28

2026自考必备9个降AI率工具测评榜单

2026自考必备9个降AI率工具测评榜单 2026年自考降AI率工具测评&#xff1a;为何需要专业榜单&#xff1f; 随着AIGC检测技术的不断升级&#xff0c;越来越多的学生和科研工作者在论文撰写过程中遭遇了“AI率超标”的难题。尤其是自考群体&#xff0c;面对严格的查重标准&#x…

作者头像 李华
网站建设 2026/4/15 11:32:23

NIVIDIA高性能计算CUDA笔记(三) cuFFT的简介及实现案例

NIVIDIA高性能计算CUDA笔记&#xff08;三&#xff09; cuFFT的简介及实现案例 1. cuFFT库的简介&#xff08;Introduction of cuFFT libaray&#xff09; ​ Fourier变换是数字信号处理领域一个很重要的数学变换&#xff0c;它用来实现将信号实现将信号从时域到频域的变换…

作者头像 李华
网站建设 2026/4/15 11:37:09

Qwen3Guard-Gen-8B能否检测AI生成的环境污染误导信息?

Qwen3Guard-Gen-8B能否检测AI生成的环境污染误导信息&#xff1f; 在社交媒体上&#xff0c;一条看似权威的消息悄然传播&#xff1a;“最新研究证实&#xff0c;雾霾只是短期不适&#xff0c;不会引发肺癌。”语气笃定、术语专业&#xff0c;甚至引用了“某国际期刊论文”——…

作者头像 李华
网站建设 2026/4/10 23:30:45

大厂架构复盘!Reddit 面对亿级流量,为什么弃用 Milvus 选择了它?Pgvector/Redis/Qdrant 深度测评!

业务团队可能说他们想要个负重一吨&#xff0c;时速两百公里的马车…… 现如今&#xff0c;借助向量检索能力&#xff0c;实现基于语义相似度的智能搜索&#xff0c;已经是所有电商、推荐、社区平台技术架构的重要一环。 作为拥有约 1.08 亿日活、 11 亿月活用户的兴趣内容社…

作者头像 李华