news 2026/4/18 10:07:08

学会理解以及使用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/18 8:07:39

2026年8款降ai率工具实测报告:降aigc效果与功能对比

看着查重报告上红彤彤的数字&#xff0c;是不是心都要凉了&#xff1f;别慌&#xff0c;这是因为现在很多检测系统都升级了&#xff0c;以前稍微改改词就能过&#xff0c;现在已经不行了&#xff0c;因为系统查的是你句子里的逻辑和思维。 说白了&#xff0c;如果你的下一句很容…

作者头像 李华
网站建设 2026/4/17 8:20:12

链表专题(八):精细操作的巅峰——「K 个一组翻转链表」

场景想象&#xff1a; 你有一列很长的火车&#xff08;链表&#xff09;&#xff0c;现在要把车厢按 每 K 节为一组 进行掉头。 比如 K2&#xff1a;[1, 2] 掉头变成 [2, 1]&#xff1b;[3, 4] 掉头变成 [4, 3]... 关键规则&#xff1a;如果最后剩下的车厢不够 K 节&#xff…

作者头像 李华