1. 概述

在这篇文章中,我们将创建一个使用WebSocket的应用程序,并使用Postman进行测试。

2. Java WebSocket

WebSocket是一种双向、全双工且持久的浏览器与服务器之间的连接。一旦建立WebSocket连接,它会一直保持打开状态,直到客户端或服务器决定关闭这个连接。

WebSocket协议是使我们的应用程序处理实时消息的一种方式。常见的替代方案包括长轮询和服务器推送事件。每种解决方案都有其优缺点。

在Spring中使用WebSocket的一种方法是使用STOMP子协议。然而,在这篇文章中,我们将使用原始WebSocket,因为目前Postman不支持STOMP

3. Postman 设置

Postman 是一个用于构建和使用API的平台。使用Postman时,我们不需要为了测试而编写仅用于HTTP客户端基础设施的代码。相反,我们创建称为集合的测试套件,让Postman与我们的API交互。

4. 使用WebSocket的应用程序

我们将构建一个简单的应用。应用程序的工作流程如下:

  • 服务器向客户端发送一次性消息
  • 它定期向客户端发送消息
  • 当接收到客户端的消息时,它将记录并发送回客户端
  • 客户端不定期向服务器发送消息
  • 客户端从服务器接收消息并记录它们

工作流程图如下:

5. Spring WebSocket

我们的服务器由两部分组成:Spring WebSocket事件处理器和Spring WebSocket配置。下面分别讨论:

5.1. Spring WebSocket 配置

通过添加@EnableWebSocket注解,可以在Spring服务器上启用WebSocket支持。

在同一配置中,我们还将为WebSocket端点注册实现的WebSocket处理器:

@Configuration
@EnableWebSocket
public class ServerWebSocketConfig implements WebSocketConfigurer {
    
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler(), "/websocket");
    }
    
    @Bean
    public WebSocketHandler webSocketHandler() {
        return new ServerWebSocketHandler();
    }
}

5.2. Spring WebSocket 处理器

WebSocket处理器类继承自TextWebSocketHandler此处理器使用handleTextMessage回调方法接收来自客户端的消息sendMessage方法将消息发送回客户端:

@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
    String request = message.getPayload();
    logger.info("Server received: {}", request);
        
    String response = String.format("response from server to '%s'", HtmlUtils.htmlEscape(request));
    logger.info("Server sends: {}", response);
    session.sendMessage(new TextMessage(response));
}

@Scheduled方法使用相同的sendMessage方法向活跃客户端广播周期性消息:

@Scheduled(fixedRate = 10000)
void sendPeriodicMessages() throws IOException {
    for (WebSocketSession session : sessions) {
        if (session.isOpen()) {
            String broadcast = "server periodic message " + LocalTime.now();
            logger.info("Server sends: {}", broadcast);
            session.sendMessage(new TextMessage(broadcast));
        }
    }
}

我们的测试端点将是:

ws://localhost:8080/websocket

6. 使用Postman进行测试

现在我们的端点准备好了,我们可以使用Postman进行测试。要测试WebSocket,我们需要v8.5.0或更高版本

在开始Postman的测试之前,先运行我们的服务器。现在让我们继续:

首先,启动Postman应用。加载后,选择“新建”:

一个新的弹出窗口将打开。从那里 选择WebSocket请求:

我们将测试一个原始WebSocket请求。界面应该看起来像这样:

现在添加我们的URL,点击连接按钮并测试连接:

所以,连接正常工作。从控制台我们可以看到,我们正在从服务器接收响应。现在尝试发送消息,服务器将回应:

测试完成后,只需点击断开连接按钮即可断开连接。

7. 总结

在这篇文章中,我们创建了一个简单的应用程序来测试WebSocket连接,并使用Postman进行了测试。

最后,相关的代码可在GitHub上找到。