Spring Webflux:非Java客户端的背压

时间:2019-11-08 12:36:41

标签: spring-webflux project-reactor

是否可以对非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)之类的生产者,是否有可能改变客户端事件的发生频率?

1 个答案:

答案 0 :(得分:0)

否,因为HTTP协议不支持应用程序反压。 您可能会对RSocket感兴趣,{{3}}是一种在协议级别支持反压的应用程序协议,