首页 > 解决方案 > 来自 Vertx 网络客户端响应正文的反应式流发布者

问题描述

我正在尝试为 Vertx Web 客户端编写一个包装器,以使用来自响应流的服务器加载响应正文Publisher

import org.reactivestreams.Publisher;
import io.vertx.reactivex.ext.web.client.WebClient;

interface Storage {
  Publisher<ByteBuffer> load(String key);
}

class WebStorage implements Storage {
  private final WebClient client;

  public WebStorage(final WebClient client) {
    this.client = client;
  }

  @Override
  public Publisher<ByteBuffer> laod(final String key) {
    return client.get(String.format("https://myhost/path?query=%s", key))
      .rxSend()
      .toFlowable()
      .map(resp -> ByteBuffer.wrap(resp.body().getBytes()));
  }
}

此解决方案不正确,因为它通过getBytes()调用以阻塞方式读取所有正文字节。

是否可以按块从 Vertx 读取响应WebClient并将其转换为Publisher(或 Rx Flowable)?

标签: javarx-javavert.xreactive-streamsvertx-httpclient

解决方案


Vert.x Web 客户端并非设计用于流式传输响应正文。它通过设计缓冲内容。

如果要流式传输内容,可以使用更灵活的底层 HTTP 客户端。


推荐阅读