首页 > 解决方案 > 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),是否可以改变客户端上的事件频率?

标签: spring-webfluxproject-reactor

解决方案


不,因为 HTTP 协议不支持应用程序背压。您可能会对RSocket感兴趣,它是一种在协议级别支持背压的应用程序协议,以及许多其他功能。


推荐阅读