2017-10-23 8 views
1

Websocket "wss : //echo.websocket.org"에 대한 클라이언트를 빌드하려고합니다. 코드는 ReactorNettyWebSocketClient()와 함께 Spring 5를 사용합니다.스프링 웹 소켓 클라이언트 리액터 시간 초과

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 초 후에 시간 초과됩니다. 그것은 핑 메시지를 보내야하고 나는 핑 메시지를 다시 기대할 것입니다. https://stackify.com/reactive-spring-5/

: 그것은 기반으로

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

} 

:

답변

1

나는 해결책을 발견