Spring Websocket Client Reactor 超时

Spring Websocket Client Reactor times out

我正在尝试为 Websocket "wss://echo.websocket.org" 构建客户端。代码使用 Spring 5 和 ReactorNettyWebSocketClient()。

public class WsClient {
 public static void main(String[] args) throws InterruptedException {
    WebSocketClient client = new ReactorNettyWebSocketClient();     
    client.execute(URI.create("wss://echo.websocket.org"), 
            new ClientWebSocketHandler()).block(Duration.ofSeconds(15));
    System.out.println("End");
}

    static class ClientWebSocketHandler implements WebSocketHandler {

    @Override
    public Mono<Void> handle(WebSocketSession session) {            
        WebSocketMessage textMessage = session.textMessage("{\"event\":\"ping\"}");
        session.send(Mono.just(textMessage));
        String payloadAsText = session.receive().blockFirst().getPayloadAsText();
        System.out.println(payloadAsText);
        return Mono.empty();
    }

    }
}

代码在 15 秒后超时。它应该发送一条 ping 消息,我希望返回 ping 消息。

我找到了解决方案:

public class WsClient {

public static void main(String[] args) throws InterruptedException {
    WebSocketClient client = new ReactorNettyWebSocketClient();     
    client.execute(URI.create("wss://echo.websocket.org"), 
            session -> session.send(Mono.just(
                    session.textMessage("{\"event\":\"ping\"}")))
            .thenMany(session
                      .receive()
                      .map(WebSocketMessage::getPayloadAsText)
                      .log())
                    .then()).block(Duration.ofSeconds(10));     
    System.out.println("End");
}

}

它基于:https://stackify.com/reactive-spring-5/