Spring WebSocketSession ID在服务器和客户端之间不同

Spring WebSocketSession ID在服务器和客户端之间不同,websocket,spring-websocket,Websocket,Spring Websocket,使用启动spring WebSocket服务器 @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new WebSoc

使用启动spring WebSocket服务器

@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("*");
    }
}
    @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();

    }
为什么ID不同

我想做的是

  • 客户端:创建会话并获取会话ID
  • 客户端:向任务服务器请求会话ID为的任务
  • 服务器:侦听会话状态,然后如果
    1)
    会话已关闭,则使用从
    3)
    获取的会话ID向任务服务器请求任务取消
所以我需要在websocket服务器和客户端之间获得相同的ID

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