簡體   English   中英

Rxjava - 我可以從不同的線程調用`Subject.onNext`方法嗎?

[英]Rxjava - Can I invoke `Subject.onNext` method from different threads?

我有一個Spring Web服務器,我想為每個請求我的控制器的N(例如10個)客戶端創建一個聊天室。

每個服務器請求都有自己的線程,如何收集每個N請求並為它創建一個房間? 我認為Rxjava有一個解決方案,所以如何實現這個,如果我不能這樣做,最好的解決方案是什么?

更新1:

在@ pavan-kumar回答的幫助下,我創建了這個:

@RestController
public class GameController {

    private final PublishSubject<Integer> subject;
    private AtomicInteger counter = new AtomicInteger(0);

    @Autowired
    public GameController(PublishSubject<Integer> subject) {
        this.subject = subject;
    }

    @PostConstruct
    public void init() {


        subject.buffer(10).subscribe(
                integers -> {
                    StringBuilder builder = new StringBuilder("[ ");
                    for (Integer integer : integers) {
                        builder = builder.append(integer).append(", ");
                    }
                    String s = builder.append("]").toString();
                    System.out.println(s);
                });
    }


    @RequestMapping(value = "/game", method = RequestMethod.GET)
    public void findNewGame() {
        int i = counter.addAndGet(1);
        subject.onNext(i);

    }


}

所以當前的問題是“我可以從不同的線程調用Subject.onNext方法嗎?”

不是直接的。 您必須以某種方式提供序列化或使用toSerialized()方法並與返回的Subject<T, R>實例進行通信。

PublishSubject<Integer> ps = PublishSubject.create();

Subject<Integer, Integer> subject = ps.toSerialized();

subject.subscribe(System.out::println);

subject.onNext(1);

雖然用例對我來說不是很清楚,但下面的方法可能會有所幫助。

Every request to server has its own thread - 使用在所有線程之間共享的static Observable 可能是每次新用戶建立連接時都可以調用onNext。

一旦你有這樣的Observable ,你可以通過buffer訂閱它,如下所示。

Observable.range(1, 50).buffer(10).subscribe(n -> System.out.println(n.get(0)));

Observable.range(1, 50)類似於static Observable ,它在每次建立連接時發出事件。 buffer負責將所有項目合並到項目List ,並在發出所述項目數量(10)時發出一個列表。 您可以subscribe此內容並根據需要采取適當的措施。

暫無
暫無

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

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