有的时候博客内容会有变动,首发博客是最新的,其余博客地址可能会未同步, 认准
https://blog.zysicyj.top
首发博客地址
系列文章地址
什么是 WebSocket?
WebSocket 是一种在 Web 应用程序中实现双向通信的协定。它容许在客户端和服务器之间建设长久的、全双工的连贯,以便实时地发送数据。
传统的 HTTP 协定是一种无状态的申请 - 响应协定,客户端发送申请,服务器返回响应,而后连贯立刻敞开。这种模型实用于大多数 Web 应用程序,但对于须要实时数据更新或双向通信的应用程序来说,它并不现实。
WebSocket 通过在客户端和服务器之间建设短暂的 TCP 连贯,提供了一种持久性的通信通道。它通过在 HTTP 握手过程中降级连贯,从而容许在同一个连贯上进行双向通信。
WebSocket 的特点包含:
- 双向通信:WebSocket 容许客户端和服务器之间双向发送数据,而不仅仅是客户端向服务器发送申请。
- 实时性:WebSocket 提供了高效的实时数据传输,能够在数据可用时立刻将其推送给客户端。
- 较低的开销:WebSocket 应用较少的网络开销,因为它应用长久连贯而不须要频繁的握手和头部信息。
- 兼容性:WebSocket 协定曾经失去了宽泛的反对,古代的 Web 浏览器和服务器都能够很好地反对 WebSocket。
WebSocket 在许多实时应用程序中失去广泛应用,例如聊天应用程序、实时合作工具、股票市场报价、多人游戏等。它提供了一种弱小的机制,使得开发者能够轻松实现实时和双向的 Web 应用程序。
Spring Boot 如何实现 WebSocket
在 Spring Boot 中,能够应用 Spring WebSocket 模块来实现 WebSocket 性能。以下是应用 Spring Boot 实现 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>
- 创立一个 WebSocket 处理器类:创立一个类,实现
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 端点:创立一个配置类,继承自
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("*");
}
}
- 启动应用程序:编写一个 Spring Boot 启动类,并增加
@SpringBootApplication
注解来启动应用程序。
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 中实现 WebSocket 性能。客户端能够应用 JavaScript 的 WebSocket
对象或其余 WebSocket 客户端库来连贯到您的 WebSocket 端点。
请留神,上述代码只是一个根本示例,您能够依据理论需要进行更简单的 WebSocket 实现。另外,还能够应用 @MessageMapping
注解来解决特定音讯类型,应用 SimpMessagingTemplate
发送音讯给订阅了特定主题的客户端等。
前端如何与 websocket 通信
在前端解决 WebSocket 连贯和音讯,您能够应用 JavaScript 的 WebSocket API 来实现。以下是根本的前端解决步骤:
- 创立 WebSocket 对象:应用
WebSocket
构造函数创立一个 WebSocket 对象,并传入 WebSocket 服务器的 URL。
var socket = new WebSocket("ws://localhost:8080/your-application/websocket");
- 监听 WebSocket 事件:通过 WebSocket 对象的事件处理程序,监听 WebSocket 的连贯状态和音讯事件。
socket.onopen = function () {// 连贯建设后的操作};
socket.onclose = function () {// 连贯敞开后的操作};
socket.onerror = function (error) {// 错误处理};
socket.onmessage = function (event) {
var message = event.data;
// 解决收到的音讯
};
- 发送音讯:应用 WebSocket 对象的
send
办法发送音讯到 WebSocket 服务器。
socket.send("Hello, server!");
- 敞开连贯:应用 WebSocket 对象的
close
办法敞开 WebSocket 连贯。
socket.close();
通过这些步骤,您能够在前端解决 WebSocket 连贯和音讯。您能够依据理论需要,在事件处理程序中实现您的业务逻辑,例如更新 UI、发送和接收数据等。
请留神,WebSocket 连贯是异步的,所以您须要适当解决连贯建设、敞开和谬误事件。此外,还能够应用其余 WebSocket 库(如 Socket.io、SockJS 等)来简化 WebSocket 解决,并提供更多高级性能,如主动重连、心跳检测等。
如何应用 Python 与 websocket 通信
要实现 Python 和 Spring Boot WebSocket 的通信,能够应用 Python 的 WebSocket 客户端库与 Spring Boot 的 WebSocket 服务器进行通信。以下是一种常见的实现形式:
- 装置 WebSocket 客户端库:应用 Python 的包管理工具(如 pip)装置 websocket-client 库。
pip install websocket-client
- 在 Python 中创立 WebSocket 连贯:在 Python 代码中导入 websocket 库,并创立一个 WebSocket 连贯到 Spring Boot 的 WebSocket 服务器。
import websocket
def on_message(ws, message):
# 解决收到的音讯
print(f"Received: {message}")
def on_error(ws, error):
# 处理错误
print(f"Error: {error}")
def on_close(ws):
# 解决连贯敞开
print("Connection closed")
def on_open(ws):
# 解决连贯建设
print("Connection established")
# 发送音讯
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 应用程序中创立 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());
// 发送音讯给 Python 客户端
session.sendMessage(new TextMessage("Hello from Spring Boot!"));
}
}
确保 WebSocket 端点的 URL 门路在 Python 和 Spring Boot 代码中匹配,并依据理论状况进行调整。
通过这些步骤,您能够在 Python 和 Spring Boot 之间建设 WebSocket 通信。当 Python 客户端发送音讯时,Spring
Boot 服务器将接管并解决该音讯,并能够向 Python 客户端发送响应音讯。
本文由 mdnice 多平台公布