赞
踩
WebSocket是一种先进的网络通信协议,它允许在单个TCP连接上进行全双工通信,即数据可以在同一时间双向流动。WebSocket由IETF标准化为RFC 6455,并且已被W3C定义为JavaScript API的标准,成为现代浏览器的重要特性之一。
WebSocket的引入彻底改变了传统的Web应用交互模式。在WebSocket之前,Web应用通常使用HTTP协议进行通信,但由于HTTP是一个无状态的、请求-响应模式的协议,它无法满足实时、双向通信的需求。WebSocket的出现,解决了这一问题,它使得Web应用能够像桌面应用一样,实现低延迟、高频率的数据交换。
WebSocket的核心特性包括:
通过本系列学习,我们会缩减《RabbitMQ实践——搭建多人聊天服务》一文中的接口,在一个连接上实现消息的收发。
在pom.xml中新增
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
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 { @Override public 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 Set<WebSocketSession> sessions = new HashSet<>(); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.add(session); } @Override protected 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
可以看到接受到了服务端的反馈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。