Websocket And Security

1. WebSocket 基础概念

什么是 WebSocket?
  • WebSocket 是一种网络通信协议,提供了在单个 TCP 连接上进行全双工通信的方式。"全双工"意味着客户端和服务器可以同时发送和接收信息,这与传统的 HTTP 请求不同,后者是一种半双工通信方式(即一次只能进行一个请求或响应)。
WebSocket 与 HTTP 的区别
  • 连接持续性:HTTP 协议是基于请求-响应模式的,通常在请求被服务端响应后连接就会关闭。而 WebSocket 在握手后就建立了一个持久的连接,直到客户端或服务器决定关闭这个连接。
  • 实时性:WebSocket 支持实时数据传输,这对于需要快速响应的应用(如在线游戏、实时聊天等)来说非常重要。
  • 头信息大小:WebSocket 的头信息比 HTTP 小,这意味着在数据传输时,WebSocket 的开销更小。
建立连接的过程
  1. 客户端请求:WebSocket 连接是通过 HTTP 请求“升级”来初始化的。客户端发送一个特殊的 HTTP 请求,包含 Upgrade: websocketConnection: Upgrade 头信息。
  2. 服务器响应:如果服务器支持 WebSocket,则会以一个状态码 101 Switching Protocols 响应,表示服务器同意改变协议。
  3. 数据传输:一旦握手完成,数据就可以通过这个连接双向传输。
使用场景
  • 实时聊天应用
  • 在线游戏
  • 实时数据更新(如股票报价)
  • 协作应用(如实时文档编辑)
WebSocket URL
  • WebSocket URL 以 ws:// (非加密) 或 wss:// (加密) 开头,类似于 HTTP 的 http:// 和 HTTPS 的 https://

2. 在 Spring Boot 中使用 WebSocket

步骤 1: 添加依赖项

首先,在你的 pom.xml 文件中添加 Spring Boot 对 WebSocket 的支持。这通常意味着添加 spring-boot-starter-websocket 依赖。

xmlCopy code<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <!-- 其他依赖 -->
</dependencies>
步骤 2: 配置 WebSocket

在 Spring Boot 应用中创建一个配置类来启用和配置 WebSocket。


@Configuration
@EnableWebSocketMessageBroker  // 启用 WebSocket 消息代理
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
   
   

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
   
   
        // 注册一个 WebSocket 端点,客户端将使用它连接到 WebSocket 服务器。
        registry.addEndpoint("/ws").withSockJS();
        // SockJS 用于兼容不支持 WebSocket 的浏览器
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
   
   
        // 定义消息代理,用于将消息从一个客户端路由到另一个客户端
        registry.setApplicationDestinationPrefixes("/app");
        // 客户端将使用此前缀发送消息
        registry.enableSimpleBroker("/topic");
        // 定义了一个简单的消息代理,客户端可以订阅的前缀
    }
}

这里使用了 STOMP(Simple Text Oriented Messaging Protocol)作为 WebSocket 的子协议。STOMP 提供了一个可互操作的线路格式,允许 STOMP 客户端与任何支持 STOMP 的消息代理进行交互。

步骤 3: 创建 WebSocket 控制器

接下来,创建一个控制器来处理发送到 WebSocket 的消息。

@Controller
public class WebSocketController {
   
   

    @MessageMapping("/hello")  // 定义消息的地址
    @SendTo("/topic/greetings")  // 定义客户端订阅的地址
    public String greeting(String message) throws Exception {
   
   
        // 当服务器接收到 "/app/hello" 的消息时,它会调用此方法
        return "Hello, " + message + "!";
    }
}

这个控制器将接收发送到 /app/hello 的消息,并将响应发送到 /topic/greetings

步骤 4: 客户端连接

在客户端,你需要使用一个合适的库来建立 WebSocket 连接。如果你的客户端是一个网页,你可以使用 SockJS 和 STOMP 客户端库。

<!DOCTYPE html>
<html>
<head>
    <title>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weighless1129

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值