有的時候博客內(nèi)容會有變動,首發(fā)博客是最新的,其他博客地址可能會未同步,認(rèn)準(zhǔn)
https://blog.zysicyj.top
首發(fā)博客地址
系列文章地址
什么是WebSocket?
WebSocket是一種在Web應(yīng)用程序中實現(xiàn)雙向通信的協(xié)議。它允許在客戶端和服務(wù)器之間建立持久的、全雙工的連接,以便實時地發(fā)送數(shù)據(jù)。
傳統(tǒng)的HTTP協(xié)議是一種無狀態(tài)的請求-響應(yīng)協(xié)議,客戶端發(fā)送請求,服務(wù)器返回響應(yīng),然后連接立即關(guān)閉。這種模型適用于大多數(shù)Web應(yīng)用程序,但對于需要實時數(shù)據(jù)更新或雙向通信的應(yīng)用程序來說,它并不理想。
WebSocket通過在客戶端和服務(wù)器之間建立長久的TCP連接,提供了一種持久性的通信通道。它通過在HTTP握手過程中升級連接,從而允許在同一個連接上進(jìn)行雙向通信。
WebSocket的特點包括:
-
雙向通信:WebSocket允許客戶端和服務(wù)器之間雙向發(fā)送數(shù)據(jù),而不僅僅是客戶端向服務(wù)器發(fā)送請求。
-
實時性:WebSocket提供了高效的實時數(shù)據(jù)傳輸,可以在數(shù)據(jù)可用時立即將其推送給客戶端。
-
較低的開銷:WebSocket使用較少的網(wǎng)絡(luò)開銷,因為它使用持久連接而不需要頻繁的握手和頭部信息。
-
兼容性:WebSocket協(xié)議已經(jīng)得到了廣泛的支持,現(xiàn)代的Web瀏覽器和服務(wù)器都可以很好地支持WebSocket。
WebSocket在許多實時應(yīng)用程序中得到廣泛應(yīng)用,例如聊天應(yīng)用程序、實時協(xié)作工具、股票市場報價、多人游戲等。它提供了一種強(qiáng)大的機(jī)制,使得開發(fā)者可以輕松實現(xiàn)實時和雙向的Web應(yīng)用程序。
Spring Boot如何實現(xiàn)WebSocket
在Spring Boot中,可以使用Spring WebSocket模塊來實現(xiàn)WebSocket功能。以下是使用Spring Boot實現(xiàn)WebSocket的基本步驟:
-
添加依賴:在 pom.xml
文件中添加以下依賴,以引入Spring WebSocket和Tomcat WebSocket的支持:
<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</dependency>
-
創(chuàng)建一個WebSocket處理器類:創(chuàng)建一個類,實現(xiàn) org.springframework.web.socket.handler.TextWebSocketHandler
,并重寫handleTextMessage
和afterConnectionEstablished
等方法來處理WebSocket事件。
import?org.springframework.web.socket.TextMessage;
import?org.springframework.web.socket.WebSocketSession;
import?org.springframework.web.socket.handler.TextWebSocketHandler;
public?class?MyWebSocketHandler?extends?TextWebSocketHandler?{
????@Override
????protected?void?handleTextMessage(WebSocketSession?session,?TextMessage?message)?throws?Exception?{
????????//?處理收到的文本消息
????}
????@Override
????public?void?afterConnectionEstablished(WebSocketSession?session)?throws?Exception?{
????????//?處理連接建立事件
????}
}
-
配置WebSocket端點:創(chuàng)建一個配置類,繼承自 org.springframework.web.socket.config.annotation.WebSocketConfigurer
,并重寫registerWebSocketHandlers
方法來注冊WebSocket處理器和端點。
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?{
????@Override
????public?void?registerWebSocketHandlers(WebSocketHandlerRegistry?registry)?{
????????registry.addHandler(new?MyWebSocketHandler(),?"/websocket").setAllowedOrigins("*");
????}
}
-
啟動應(yīng)用程序:編寫一個Spring Boot啟動類,并添加 @SpringBootApplication
注解來啟動應(yīng)用程序。
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public?class?MyApplication?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(MyApplication.class,?args);
????}
}
通過這些步驟,您可以在Spring Boot中實現(xiàn)WebSocket功能。客戶端可以使用JavaScript的WebSocket
對象或其他WebSocket客戶端庫來連接到您的WebSocket端點。
請注意,上述代碼只是一個基本示例,您可以根據(jù)實際需求進(jìn)行更復(fù)雜的WebSocket實現(xiàn)。另外,還可以使用@MessageMapping
注解來處理特定消息類型,使用SimpMessagingTemplate
發(fā)送消息給訂閱了特定主題的客戶端等。
前端如何與websocket通信
在前端處理WebSocket連接和消息,您可以使用JavaScript的WebSocket API來實現(xiàn)。以下是基本的前端處理步驟:
-
創(chuàng)建WebSocket對象:使用 WebSocket
構(gòu)造函數(shù)創(chuàng)建一個WebSocket對象,并傳入WebSocket服務(wù)器的URL。
var?socket?=?new?WebSocket("ws://localhost:8080/your-application/websocket");
-
監(jiān)聽WebSocket事件:通過WebSocket對象的事件處理程序,監(jiān)聽WebSocket的連接狀態(tài)和消息事件。
socket.onopen?=?function?()?{
????//?連接建立后的操作
};
socket.onclose?=?function?()?{
????//?連接關(guān)閉后的操作
};
socket.onerror?=?function?(error)?{
????//?錯誤處理
};
socket.onmessage?=?function?(event)?{
????var?message?=?event.data;
????//?處理收到的消息
};
-
發(fā)送消息:使用WebSocket對象的 send
方法發(fā)送消息到WebSocket服務(wù)器。
socket.send("Hello,?server!");
-
關(guān)閉連接:使用WebSocket對象的 close
方法關(guān)閉WebSocket連接。
socket.close();
通過這些步驟,您可以在前端處理WebSocket連接和消息。您可以根據(jù)實際需求,在事件處理程序中實現(xiàn)您的業(yè)務(wù)邏輯,例如更新UI、發(fā)送和接收數(shù)據(jù)等。
請注意,WebSocket連接是異步的,所以您需要適當(dāng)處理連接建立、關(guān)閉和錯誤事件。此外,還可以使用其他WebSocket庫(如Socket.io、SockJS等)來簡化WebSocket處理,并提供更多高級功能,如自動重連、心跳檢測等。
如何使用Python與websocket通信
要實現(xiàn)Python和Spring Boot WebSocket的通信,可以使用Python的WebSocket客戶端庫與Spring Boot的WebSocket服務(wù)器進(jìn)行通信。以下是一種常見的實現(xiàn)方式:
-
安裝WebSocket客戶端庫:使用Python的包管理工具(如pip)安裝websocket-client庫。
pip?install?websocket-client
-
在Python中創(chuàng)建WebSocket連接:在Python代碼中導(dǎo)入websocket庫,并創(chuàng)建一個WebSocket連接到Spring Boot的WebSocket服務(wù)器。
import?websocket
def?on_message(ws,?message):
????#?處理收到的消息
????print(f"Received:?{message}")
def?on_error(ws,?error):
????#?處理錯誤
????print(f"Error:?{error}")
def?on_close(ws):
????#?處理連接關(guān)閉
????print("Connection?closed")
def?on_open(ws):
????#?處理連接建立
????print("Connection?established")
????#?發(fā)送消息
????ws.send("Hello?from?Python!")
websocket.enableTrace(True)
ws?=?websocket.WebSocketApp("ws://localhost:8080/your-websocket-endpoint",
????????????????????????????on_message=on_message,
????????????????????????????on_error=on_error,
????????????????????????????on_close=on_close)
ws.on_open?=?on_open
ws.run_forever()
-
在Spring Boot中處理WebSocket消息:在您的Spring Boot應(yīng)用程序中創(chuàng)建WebSocket處理器類,處理來自Python客戶端的消息。
import?org.springframework.stereotype.Component;
import?org.springframework.web.socket.handler.TextWebSocketHandler;
import?org.springframework.web.socket.TextMessage;
import?org.springframework.web.socket.WebSocketSession;
@Component
public?class?MyWebSocketHandler?extends?TextWebSocketHandler?{
????@Override
????protected?void?handleTextMessage(WebSocketSession?session,?TextMessage?message)?throws?Exception?{
????????//?處理收到的消息
????????System.out.println("Received:?"?+?message.getPayload());
????????//?發(fā)送消息給Python客戶端
????????session.sendMessage(new?TextMessage("Hello?from?Spring?Boot!"));
????}
}
確保WebSocket端點的URL路徑在Python和Spring Boot代碼中匹配,并根據(jù)實際情況進(jìn)行調(diào)整。
通過這些步驟,您可以在Python和Spring Boot之間建立WebSocket通信。當(dāng)Python客戶端發(fā)送消息時,Spring Boot服務(wù)器將接收并處理該消息,并可以向Python客戶端發(fā)送響應(yīng)消息。文章來源:http://www.zghlxwxcb.cn/news/detail-695104.html
本文由 mdnice 多平臺發(fā)布文章來源地址http://www.zghlxwxcb.cn/news/detail-695104.html
到了這里,關(guān)于【面試題精講】什么是websocket?如何與前端通信?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!