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上找到。