您的位置:

使用Spring Boot集成Socket实现实时通信

一、Socket通信概述

Socket是一种通信协议,是实现网络通信的基础。通常用于两台计算机之间的通信,一台计算机充当服务端,另一台计算机充当客户端,通过Socket建立连接进行通信。

Socket通信可分为TCP和UDP两种协议类型。TCP是一种面向连接的通信协议,它在通信前需要建立连接,通信结束后需要关闭连接,并保证数据的可靠传输。UDP则是一种无连接的通信协议,它不需要建立连接及断开连接,且不保证数据的可靠传输。

二、Spring Boot集成Socket

使用Spring Boot集成Socket可以快速构建实时通信应用。下面通过一个简单的示例来演示如何在Spring Boot应用中集成Socket。

三、示例说明

我们以一个简单的聊天室应用为例,演示如何使用Spring Boot集成Socket。具体实现过程如下:

1. 创建Spring Boot工程

首先需要创建一个Spring Boot工程,可以使用Spring Initializr创建一个基本的Spring Boot工程。

2. 添加Socket依赖

在工程中添加Socket依赖,可以在pom.xml中加入以下代码:

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

3. 创建WebSocket处理类

创建一个WebSocket处理类,可以在类上使用@ServerEndpoint注解来标识它是一个WebSocket处理类。在WebSocket处理类中可以定义多个方法来处理不同的请求。

@ServerEndpoint("/websocket")
public class WebSocketServer {
    private static Set sessions = Collections.synchronizedSet(new HashSet
   ());

    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
        System.out.println("WebSocket opened: " + session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        System.out.println("Message received: " + message);
        for (Session s : sessions) {
            if (!s.equals(session)) {
                s.getBasicRemote().sendText(message);
            }
        }
    }

    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
        System.out.println("WebSocket closed: " + session.getId());
    }
}

   
  

4. 配置WebSocket

添加一个WebSocketConfigurer的实例来配置WebSocket。

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new WebSocketServer(), "/websocket");
    }
}

5. 创建页面

创建一个简单的HTML页面来作为用户界面,其中包含了一个用于输入消息的输入框和一个用于显示消息的区域。同时,在页面中使用JavaScript来建立WebSocket连接,向服务器发送消息并接收消息。



    
  
    WebSocket Chatroom
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>


    <input id="message" type="text">
    
    
  
<script type="text/javascript"> var websocket = new WebSocket("ws://" + window.location.host + "/websocket"); websocket.onopen = function(event) { console.log("WebSocket opened: " + event); } websocket.onmessage = function(event) { console.log("Message received: " + event); $("#chatroom").append("<p>" + event.data + "</p>"); } $("#send").click(function() { var message = $("#message").val(); websocket.send(message); console.log("Message sent: " + message); $("#message").val(""); }); </script>