java - 来自 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
)?
解决方案
Vert.x Web 客户端并非设计用于流式传输响应正文。它通过设计缓冲内容。
如果要流式传输内容,可以使用更灵活的底层 HTTP 客户端。
推荐阅读
- java - 如何在 Spring-Kafka 中使用 Avro 序列化
- python - 没有这样的文件或目录:'results.txt'
- javascript - 如何在 Google Map api 中使用文本和数字过滤参数
- php - 如果电子邮件不是有效电子邮件,如何删除用户
- javascript - 使用 jQuery,无法将点击行为添加到使用 innerHTML 创建的按钮
- javascript - 枚举返回的 api 数据的索引
- java - 如何修复未连接适配器;在android pie中跳过布局
- python-3.x - Pyinstaller adddata query
- kubernetes - Pod 不通过 service 与其他 pod 通信
- prolog - 如何在 Prolog 中输出我的用户输入知识库的答案