北京自己怎样做网站,wordpress oauth2插件,wordpress修改作者,浙江金顶建设公司网站大纲 最小可行案例依赖开启Websocket#xff0c;绑定路由逻辑类 测试参考资料 WebSocket是一种先进的网络通信协议#xff0c;它允许在单个TCP连接上进行全双工通信#xff0c;即数据可以在同一时间双向流动。WebSocket由IETF标准化为RFC 6455#xff0c;并且已被W3C定义为… 大纲 最小可行案例依赖开启Websocket绑定路由逻辑类 测试参考资料 WebSocket是一种先进的网络通信协议它允许在单个TCP连接上进行全双工通信即数据可以在同一时间双向流动。WebSocket由IETF标准化为RFC 6455并且已被W3C定义为JavaScript API的标准成为现代浏览器的重要特性之一。 WebSocket的引入彻底改变了传统的Web应用交互模式。在WebSocket之前Web应用通常使用HTTP协议进行通信但由于HTTP是一个无状态的、请求-响应模式的协议它无法满足实时、双向通信的需求。WebSocket的出现解决了这一问题它使得Web应用能够像桌面应用一样实现低延迟、高频率的数据交换。 WebSocket的核心特性包括
全双工通信WebSocket允许客户端和服务器之间进行双向通信数据可以在同一时间双向流动。这意味着服务器可以主动向客户端推送数据而无需等待客户端发起请求。长连接WebSocket连接一旦建立就会保持打开状态直到显式关闭。这种长连接特性减少了频繁建立和销毁连接的开销提高了通信效率。轻量级头部WebSocket数据帧采用紧凑的二进制格式减少了不必要的头部信息提高了数据传输效率。实时性由于数据可以直接在已建立的连接上传输WebSocket能够实现实时或接近实时的数据交互。跨域支持与HTTP一样WebSocket也允许跨域通信只需服务器端设置相应的CORS跨源资源共享头即可。
通过本系列学习我们会缩减《RabbitMQ实践——搭建多人聊天服务》一文中的接口在一个连接上实现消息的收发。
最小可行案例
依赖
在pom.xml中新增
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactId
/dependency开启Websocket绑定路由
src\main\java\com\nyctlc\front\config\WebSocketConfig.java
package com.nyctlc.front.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;import com.nyctlc.front.handler.WebSocketHandler;Configuration
EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new WebSocketHandler(), /websocket).setAllowedOrigins(*);}
}EnableWebSocket 是 Spring Boot 中的一个注解它主要用于启用对 WebSocket 的支持。 我们通过WebSocketHandlerRegistry的addHandler方法将/websocket接口的处理逻辑交由自定义的WebSocketHandler类处理同时使用setAllowedOrigins来表示接受所有的域过来的请求。
逻辑类
src\main\java\com\nyctlc\front\handler\WebSocketHandler.java
package com.nyctlc.front.handler;import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.io.IOException;
import java.util.HashSet;
import java.util.Set;public class WebSocketHandler extends TextWebSocketHandler {private static SetWebSocketSession sessions new HashSet();Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {sessions.add(session);}Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {for (WebSocketSession webSocketSession : sessions) {if (webSocketSession.isOpen()) {try {webSocketSession.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}}}
}当连接建立后afterConnectionEstablished会被调用我们将连接保存到sessions集合中。这一步主要是为了后续给各个连接发送请求用。 handleTextMessage表示收到了请求然后会遍历所有连接并会对处于Open状态的连接发送收到的消息。这儿就是收发放在一起了。
测试
我在网页中用JS做了各种测试会发现遇到很多问题。后来索性采用Postman来测试亲测可行且稳定。
填入我们绑定的地址ws://localhost:8080/websocket 下图可见连接上了 我们发送一条hello 可以看到接受到了服务端的反馈
参考资料
https://medium.com/ropelife/real-time-communication-with-websocket-in-spring-boot-using-webflux-5d9fbb36a0ab