2026/5/21 12:16:53
网站建设
项目流程
idc网站备案,如何建设网站首页,wordpress公司主题,社交网站平台怎么做什么是WebSocket
这是一种基于TCP的全双工长连接通信协议#xff08;通常直接说是长连接#xff09;#xff0c;用于在客户端和服务端持续交换消息。#xff08;重点#xff1a;客户端和服务端、持续交换#xff09;在Spring中有着一个最基础的接口public interface WebS…什么是WebSocket这是一种基于TCP的全双工长连接通信协议通常直接说是长连接用于在客户端和服务端持续交换消息。重点客户端和服务端、持续交换在Spring中有着一个最基础的接口public interface WebSocketHandler这是spring对WebSocket连接生命周期的最小抽象。里面有五个接口建立连接后afterConnectionEstablished这一步是在经历握手之后成功连接之后要做的事情通常是记录会话Session初始化连接资源启动心跳监测打log等等。然后就是接收到了消息对消息进行处理handleMessagehandleMessage(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工具也就是异常关闭自然就会进入异常处理部分。