wordpress制作网站模板,花溪建设村镇银行官方网站,易网,建模培训班目录 一、WebSocket 详解1. 定义与特点#xff1a;2. 工作原理#xff1a;3. 应用场景#xff1a; 二、入门案例 一、WebSocket 详解
1. 定义与特点#xff1a;
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传… 目录 一、WebSocket 详解1. 定义与特点2. 工作原理3. 应用场景 二、入门案例 一、WebSocket 详解
1. 定义与特点
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传输克服了传统 HTTP 协议只能由客户端发起请求、服务器响应的单向通信模式的局限性。特点包括低延迟、实时性强、减少不必要的网络流量和服务器资源消耗等。HTTP协议和WebSocket协议对比
HTTP是短连接WebSocket是长连接HTTP通信是单向的基于请求响应模式浏览器发送请求给服务器WebSocket支持双向通信HTTP和WebSocket底层都是TCP连接
2. 工作原理
建立连接客户端向服务器发起 WebSocket 连接请求该请求通过 HTTP 协议进行握手。如果服务器支持 WebSocket它会返回一个特殊的 HTTP 响应通知客户端可以将连接升级为 WebSocket 连接。数据传输一旦连接建立客户端和服务器可以随时双向发送数据。数据以帧的形式进行传输可以是文本数据或二进制数据。连接关闭任何一方都可以发送关闭连接的请求关闭连接后双方不能再进行数据传输。
**思考**既然WebSocket支持双向通信功能看似比HTTP强大那么我们是不是可以基于WebSocket开发所有的业务功能WebSocket缺点
服务器长期维护长连接需要一定的成本各个浏览器支持程度不一WebSocket 是长连接受网络限制比较大需要处理好重连
结论WebSocket并不能完全取代HTTP它只适合在特定的场景下使用
3. 应用场景
实时聊天应用实现用户之间的即时通信消息实时推送。在线游戏同步游戏状态实时交互。金融交易平台实时显示股票价格、交易数据等。监控系统实时反馈系统状态、设备运行数据等。弹幕的实现
二、入门案例
以下是一个使用 Java 和 Spring Boot 实现的简单 WebSocket 入门案例
创建一个 Spring Boot 项目并在项目的依赖管理文件如 pom.xml中添加 Spring Boot WebSocket 的依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactId
/dependency配置 WebSocket
创建一个配置类用于配置 WebSocket 端点
import org.springframework.context.annotation.Bean;
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;Configuration
EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(sampleWebSocketHandler(), /ws).setAllowedOrigins(*);}Beanpublic SampleWebSocketHandler sampleWebSocketHandler() {return new SampleWebSocketHandler();}
}创建 WebSocket 处理类
import org.springframework.stereotype.Component;
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.ArrayList;
import java.util.List;Component
public class SampleWebSocketHandler extends TextWebSocketHandler {private ListWebSocketSession sessions new ArrayList();Overridepublic void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {// 当接收到客户端消息时可以进行处理并向所有连接的客户端广播String payload message.getPayload();for (WebSocketSession s : sessions) {s.sendMessage(message);}}Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 当连接建立时将 session 添加到列表中sessions.add(session);}Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {// 当连接关闭时从列表中移除 sessionsessions.remove(session);}
}在前端页面中使用 WebSocket
!DOCTYPE html
htmlheadscriptvar socket new WebSocket(ws://localhost:8080/ws);socket.onmessage function (event) {console.log(event.data);};function sendMessage() {var message document.getElementById(messageInput).value;socket.send(message);}/script
/headbodyinput typetext idmessageInputbutton onclicksendMessage()发送消息/button
/body/html