spring-webflux - Spring Webflux:非 Java 客户端的背压
问题描述
有没有办法为非 Java 订阅者使用背压(例如,一些 JS 库)?
对于这个发布者
Flux.range(1, 100)
和这个订阅者:
public class SystemOutBackpressureSubscriber<T> extends BaseSubscriber<T> {
private int delay;
public SystemOutBackpressureSubscriber(int delay) {
this.delay = delay;
}
public void hookOnSubscribe(Subscription subscription) {
request(1);
}
public void hookOnNext(T value) {
System.out.println(value);
if(delay != 0) {
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
request(1);
}
}
如果delay == 0
一次打印所有数字,但如果delay != 0
在打印每个数字之前有暂停。除了 JS 有什么方法可以做同样的事情吗?在我查看的所有互联网示例中,JS 客户端只能监听事件流。如果 Rest 控制器返回像这样的生产者Flux.range(1, 100)
,是否可以改变客户端上的事件频率?
解决方案
不,因为 HTTP 协议不支持应用程序背压。您可能会对RSocket感兴趣,它是一种在协议级别支持背压的应用程序协议,以及许多其他功能。
推荐阅读
- sqlite - 如何在 Xamarin.Forms 中使用 FilePicker 过滤 SQLite3 文件
- html - 如何在 R Shiny 中使 radioButton 文本选择加粗?
- python - 列总和接近 N 的最小行数,处理非整数
- c# - 带有 asp.net 核心二进制文件 x86_64 的 bitbake 嵌入式 linux docker 容器
- regex - 正则表达式检查不在引号中的绑定参数
- sql - 有没有办法根据多个其他列计算 SQL 中的动态列
- c++ - constexpr initializer_list 引发错误:“表达式必须具有常量值——引用或指向具有有限生命周期的临时指针”
- angular - Angular / Jasmine:没有覆盖提供者!还有如何测试材质对话框
- html - 选中复选框时更改标签背景颜色
- mysql - 当从 information_schema.columns 表中长时间返回“mediumtext”时,如何判断列是文本还是长列?