public static void main(String... args) throws Exception {

    Observable<WebSocketConnection> wsConnection =
        HttpClient.newClient("localhost", 8888)
            // .enableWireLogging(LogLevel.ERROR)
            .createGet("/rs")
            .requestWebSocketUpgrade()
            .flatMap(WebSocketResponse::getWebSocketConnection);

    Publisher<WebSocketDuplexConnection> connectionPublisher =
        WebSocketDuplexConnection.create(RxReactiveStreams.toPublisher(wsConnection));

    ReactiveSocket reactiveSocket =
        RxReactiveStreams.toObservable(connectionPublisher)
            .map(
                w ->
                    ReactiveSocket.fromClientConnection(
                        w, ConnectionSetupPayload.create("UTF-8", "UTF-8")))
            .toBlocking()
            .single();

    reactiveSocket.startAndWait();

    int i = ThreadLocalRandom.current().nextInt(5, 25);
    System.out.println("asking for " + i + " ints");
    ByteBuffer b = ByteBuffer.allocate(BitUtil.SIZE_OF_INT);
    b.putInt(i);

    Payload p =
        new Payload() {
          @Override
          public ByteBuffer getData() {
            b.rewind();
            return b;
          }

          @Override
          public ByteBuffer getMetadata() {
            return Frame.NULL_BYTEBUFFER;
          }
        };

    Observable<Payload> payloadObservable =
        RxReactiveStreams.toObservable(reactiveSocket.requestStream(p));
    payloadObservable
        .map(response -> response.getData().getInt(0))
        .doOnNext(r -> System.out.println("Got from server => " + r))
        .doOnError(Throwable::printStackTrace)
        .toBlocking()
        .last();
  }
 public static Publisher<ByteBuffer> createPublisher(final byte[] bytes, final int chunkSize) {
   Observable<ByteBuffer> observable = Observable.from(new ByteBufferIterable(bytes, chunkSize));
   return RxReactiveStreams.toPublisher(observable);
 }
 @Override
 public Observable<Void> handle(WebSocketConnection connection) {
   Mono<Void> result = this.handler.handle(createSession(connection));
   return RxReactiveStreams.toObservable(result);
 }