使用Spring Boot实现WebSocket通信

使用Spring Boot实现WebSocket通信

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

在现代Web应用程序中,实时通信变得越来越重要。WebSocket是一种在单个TCP连接上进行全双工通信的协议,非常适合实现实时功能。本文将详细介绍如何使用Spring Boot实现WebSocket通信,包括配置、服务端和客户端的实现,以及一个完整的示例。

1. 创建Spring Boot项目

首先,创建一个Spring Boot项目,并添加WebSocket依赖。在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

2. 配置WebSocket

接下来,创建一个配置类来配置WebSocket。

package cn.juwatech.websocket.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 cn.juwatech.websocket.handler.WebSocketHandler;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new WebSocketHandler(), "/ws").setAllowedOrigins("*");
    }
}

3. 实现WebSocket处理器

创建一个处理WebSocket消息的类。

package cn.juwatech.websocket.handler;

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class WebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("Connection established: " + session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Hello, " + message.getPayload() + "!"));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("Connection closed: " + session.getId());
    }
}

4. 创建前端页面

创建一个简单的HTML页面,用于测试WebSocket通信。将以下内容保存为index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket Test</title>
</head>
<body>
    <h1>WebSocket Test</h1>
    <input type="text" id="messageInput" placeholder="Enter your message">
    <button onclick="sendMessage()">Send</button>
    <p id="response"></p>

    <script>
        var ws = new WebSocket("ws://localhost:8080/ws");

        ws.onopen = function() {
            console.log("WebSocket connection established");
        };

        ws.onmessage = function(event) {
            document.getElementById("response").innerText = event.data;
        };

        ws.onclose = function() {
            console.log("WebSocket connection closed");
        };

        function sendMessage() {
            var message = document.getElementById("messageInput").value;
            ws.send(message);
        }
    </script>
</body>
</html>

5. 运行Spring Boot应用

创建Spring Boot主类并运行应用。

package cn.juwatech.websocket;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebSocketApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebSocketApplication.class, args);
    }
}

启动应用后,打开浏览器并访问http://localhost:8080,输入消息并点击“Send”按钮,即可看到WebSocket通信的效果。

6. 完整示例

为了完整起见,以下是所有相关类和配置的代码汇总。

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

WebSocketConfig.java

package cn.juwatech.websocket.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 cn.juwatech.websocket.handler.WebSocketHandler;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new WebSocketHandler(), "/ws").setAllowedOrigins("*");
    }
}

WebSocketHandler.java

package cn.juwatech.websocket.handler;

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class WebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("Connection established: " + session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Hello, " + message.getPayload() + "!"));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("Connection closed: " + session.getId());
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket Test</title>
</head>
<body>
    <h1>WebSocket Test</h1>
    <input type="text" id="messageInput" placeholder="Enter your message">
    <button onclick="sendMessage()">Send</button>
    <p id="response"></p>

    <script>
        var ws = new WebSocket("ws://localhost:8080/ws");

        ws.onopen = function() {
            console.log("WebSocket connection established");
        };

        ws.onmessage = function(event) {
            document.getElementById("response").innerText = event.data;
        };

        ws.onclose = function() {
            console.log("WebSocket connection closed");
        };

        function sendMessage() {
            var message = document.getElementById("messageInput").value;
            ws.send(message);
        }
    </script>
</body>
</html>

WebSocketApplication.java

package cn.juwatech.websocket;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebSocketApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebSocketApplication.class, args);
    }
}

通过以上示例,我们可以看到如何使用Spring Boot实现WebSocket通信。WebSocket的全双工通信特性使得它非常适合实时应用,如在线聊天、实时通知等。希望这些示例代码能帮助大家更好地理解和使用WebSocket。

著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

posted @ 2024-07-12 10:22  省赚客开发者团队  阅读(13)  评论(0编辑  收藏  举报