websocket - Spring WebSocketSession ID在服务器和客户端之间是不同的
问题描述
启动spring WebSocket Server
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new WebSocketHandler() {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("SERVER Established " + session.getId());
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
System.out.println("SERVER Closed " + session.getId());
}
@Override
public boolean supportsPartialMessages() {
return false;
}
}, "/ws").setAllowedOrigins("*");
}
}
然后连接到 WebSocket 服务器
@Value("${server.port}")
int port;
@Test
public void test() throws InterruptedException, IOException, ExecutionException {
URI uri = UriComponentsBuilder
.fromUriString("ws://127.0.0.1:" + port + "/ws").buildAndExpand().encode().toUri();
WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
WebSocketSession session = new StandardWebSocketClient()
.doHandshake(new WebSocketHandler() {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("CLIENT Established " + session.getId());
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
System.out.println("CLIENT Closed " + session.getId());
}
@Override
public boolean supportsPartialMessages() {
return false;
}
}, headers, uri)
.get();
}
控制台输出是
SERVER Established d1d1c7ba-eecc-1a42-ad1f-ff469a4ace94
CLIENT Established ca0d6a93-49eb-5022-630b-3a06afc25200
CLIENT Closed ca0d6a93-49eb-5022-630b-3a06afc25200
SERVER Closed d1d1c7ba-eecc-1a42-ad1f-ff469a4ace94
为什么ID不一样?
我想做的是,
-
- 客户端:创建会话并获取会话 ID
-
- 客户端:使用会话 ID 向任务服务器请求任务。
-
- server :监听会话状态,如果
1)
会话关闭,则向具有会话 ID 的任务服务器请求取消任务3)
。
- server :监听会话状态,如果
所以我需要在 websocket 服务器和客户端上获得相同的 ID。
解决方案
推荐阅读
- php - Laravel:处理数据后使用外部变量?
- flutter - 什么是偏移类?
- firebase - Stackdriver 怎么弄乱了我的错误分组
- batch-rename - 替换一长串文件名中的一个字符
- typescript - TypeScript - 如何从方法的参数推断类泛型类型?
- python - Zappa 部署错误部署 lambda 失败。对“/”的 GET 请求产生了 502 响应代码
- python - pymongo 无序 vs 有序批量写入速度
- mysql - MYSQL:在单个查询中计算按两个不同条件分组的列的总和
- javascript - 如何使用 ctrl+p 从网页加载 pdf
- javascript - 如何使用 TypeScript 接口检查这三个值的类型?