昌都市网站建设_网站建设公司_HTTPS_seo优化
2026/1/7 15:40:55 网站建设 项目流程

什么是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工具(也就是异常关闭),自然就会进入异常处理部分。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询