1、概览 {#1概览}
本文将会带你了解如何使用 spring-websockets 创建一个 Websocket 应用,并且使用 Postman 来进行测试。
2、Java WebSocket {#2java-websocket}
WebSocket 是 Web 浏览器和服务器之间的一种双向、全双工、持久连接。一旦建立了 WebSocket 连接,该连接就会一直打开,直到客户端或服务器决定关闭该连接。
WebSocket 协议是实现应用处理实时消息的一种方式之一。最常见的替代方案是长轮询(long polling)和服务器推送事件(server-sent events)。每种解决方案都有其优点和缺点。
在 Spring 中使用 WebSockets 的一种方式是使用 STOMP 子协议。不过,本文使用原始 WebSockets,因为到目前为止,Postman 还不支持 STOMP。
3、Postman {#3postman}
Postman 是一个用于构建和使用 API 的 API 平台。使用 Postman 时,无需为了测试而编写 HTTP 客户端基础设施代码。相反,可以创建称为集合(collections)的测试套件,并让 Postman 与 API 进行交互。
4、WebSocket 应用 {#4websocket-应用}
创建一个简单的应用,工作流程如下:
- 服务器向客户端发送一次性消息
- 服务器定期向客户端发送消息
- 从客户端接收消息时,通过日志记录消息并将其发送回客户端
- 客户端向服务器发送非周期性消息
- 客户端接收来自服务器的消息并将其输出到日志
程图如下:
5、Spring WebSocket {#5spring-websocket}
服务器由两部分组成。Spring WebSocket Event Handler(事件处理器)和 Spring WebSocket 配置。
5.1、Spring WebSocket 配置 {#51spring-websocket-配置}
在配置类上添加 @EnableWebSocket
注解,可以在 Spring 服务器中启用 WebSocket 支持。
在配置类中,为 WebSocket 端点注册 WebSocket Handler 实现:
@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 Handler {#52spring-websocket-handler}
WebSocket Handler 类继承了 TextWebSocketHandler
。该 Handler 使用 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 进行测试 {#6使用-postman-进行测试}
要测试 WebSocket,必须使用 v8.5.0 或更高版本。
启动 Postman,选择 "new":
在弹出的窗口中选择 "WebSocket Request":
测试原始 WebSocket 请求的界面类似如下:
添加 URL。点击 "connect" 按钮并测试连接:
如上,连接正常。从控制台可以看到,正在接收服务器的响应。现在试着发送信息,就会收到服务器的回复:
测试完成后,只需单击 "disconnect" 按钮即可断开连接。
7、总结 {#7总结}
本文介绍了如何使用 spring websockets 创建一个简单的 WebSocket 应用,并使用 Postman 来进行测试。
Ref:https://www.baeldung.com/postman-websocket-apis