我有 2 個使用 grpc 的服務器。
我的詳細服務器邏輯描述如下。
服務器結構(---->是grpc連接)
Client ----> ServerA ----> ServerB
資料流如下。
- 客戶端發送流資料。ex(DEF 資料發送)
- ServerA 存盤資料。(ABC 是以前的資料,DEF 是新的資料,所以總資料是 ABCDEF)
- ServerA 從客戶端 (DEF) 向 ServerB 發送最新資料
在這種情況下,當發生某些事件時,我需要與 ServerB 斷開連接并連接另一臺服務器。
例如,
事件發生時的示意圖如下。
Client ----> ServerA --X(Stream Stop)--> ServerB
?--(reconnect to other server using grpc)--> ServerB'
我想按順序發送舊資料流。
即使服務器正在鏈接 ServerA 從客戶端接收資料(EX 資料是 GHI)
所以,當ServerA的連接改變完成時。
資料流如下
- 服務器 A 將以前的總資料發送到服務器 B' (ABCDEF)
- 服務器 A 正在接收最新資料。當服務器更改未完成(GHI)時,可能會收到此資料
- 最新資料(GHI)被發送到ServerB'
我希望這個流程圖能正常作業。
你能告訴我什么好主意嗎??
謝謝你。
uj5u.com熱心網友回復:
我找到答案。答案是反應式 X。
例如,
ReplaySubject subject = ReplaySubject.create();
subject.subscribe(..anysub function);
...
void pushData(int data) {
if(server change) {
subject data supress
subject clear // caused when replay subscribe clear
ReplaySubject newSubject = ReplaySubject.create();
newSubject.onNext(suppress data);
newSubject.onNext(data);
subject = newSubject;
} else {
subject.onNext(data);
}
//when server change event trigger
}
那是我最好的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/343379.html
