簡體   English   中英

服務器使用事件反應器發送了事件spring webFlux

[英]server sent event spring webFlux with reactor

這是通過瀏覽器客戶端分發常見主題信息的正確方法嗎?

@RestController
public class GenvScriptHandler {

    DirectProcessor<String> topicData = DirectProcessor.create();
    FluxSink<String> sink;
    int test;


    @GetMapping(value = "/addTopic")
    public void addTopic() {
        if (sink == null) {
            sink = topicData.sink();
        }
        sink.next(String.valueOf(test++));
    }

    @GetMapping(value = "/getTopic", produces = "text/event-stream")
    public Flux<String> getTopic() {
        Flux<String> autoConnect = topicData.publish().autoConnect();

        return autoConnect;
    }
}

當我使用DirectProcessor時,不可能有背壓,我想知道通過sse發送時如何消耗通量。 訂戶是否可以請求少於通量的元素?

http://projectreactor.io/docs/core/release/reference/#_directprocessor

因此,如果您通過N個元素推送DirectProcessor,但它的至少一個訂閱者所請求的少於N個元素,則DirectProcessor會向其訂閱者發出IllegalStateException信號。

訂閱SSE請求,執行請求(1)而不是請求(Integer.MAX_VALUE)

因此,如果我下沉* 1000次,即使有訂閱者,也會出現Processor OverLoad和異常:

reactor.core.Exceptions$OverflowException: Can't deliver value due to lack of requests

在我的情況下更安全地使用EmitterProcessor或ReplayProcessor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM