Клиент RSocket Java для доступа к Binance websocket API

#java #websocket #rsocket

#java #websocket #rsocket

Вопрос:

Я пытаюсь подключиться к конечной точке Binance websocket с помощью RSocket с помощью Spring, но я получаю следующее исключение.

java.lang.AssertionError: expectation "consumeNextWith" failed (expected: onNext(); actual: onError(java.nio.channels.ClosedChannelException))

Вот мой тестовый код:

 @SpringBootTest
@Slf4j
class RSocketClientIntegrationTest {

    private static RSocketRequester requester;

    @BeforeAll
    public static void setupOnce(@Autowired RSocketRequester.Builder builder) {
        // given
        requester = builder
                .connectWebSocket(URI.create("wss://stream.binance.com:9443/ws"))
                .block();
    }

    @Test
    void shouldRetrieveStockPricesFromTheService() {
        //when
        final Flux<String> aggregatedTradeStream = requester
                .route("/bnbbtc@aggTrade")
                .retrieveFlux(String.class)
                .take(1)
                .doOnError(e -> log.error(e.toString()));

        // then
        StepVerifier.create(aggregatedTradeStream)
                .consumeNextWith(response -> {
                    assertThat(response).isNotNull();
                })
                .verifyComplete();
    }
}
  

Могу ли я подключиться непосредственно к конечной точке WebSocket с помощью RSocket или мне нужно создать сервер RSocket, который обрабатывает websocket, а затем с этого прокси-сервера подключиться к websocket?

Ответ №1:

RSocket через WebSocket использует websocket в качестве транспорта для передачи полезных данных RSocket. Таким образом, вы не можете подключиться к необработанному WebSocket и ожидать, что что-либо сработает.

Попробуйте протестировать вышеуказанную программу на конечной точке, такой как

wss://rsocket-demo.herokuapp.com/rsocket

Смотрите документы на https://rsocket-demo.herokuapp.com /

Комментарии:

1. Спасибо за ваш ответ. Вы правы. Binance Websocket не является конечной точкой RSocket, поэтому я не могу использовать соединение RSocket.