1 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
您可以使用 graphql 訂閱(有關(guān)詳細(xì)信息,請(qǐng)參閱 apollo 文檔)。
在開始查詢當(dāng)前狀態(tài)。雙方(服務(wù)器和客戶端)將擁有相同的數(shù)據(jù)。兩者都可以使用相同的庫(kù),feimmutable.js
客戶端調(diào)用訂閱,開始監(jiān)聽“onListChange”消息。
在服務(wù)器 insertElement
, 上removeElement
,updateElement
解析器也在做同樣的事情:
處理后端狀態(tài)的突變;
insert
將(或remove
)編碼update
為actionType
和所需的數(shù)據(jù)(突變參數(shù)、新創(chuàng)建的 id、版本號(hào))為payload
;使用發(fā)布將此('onListChange')消息發(fā)送給訂閱者。
客戶:
收到一條消息;
解碼消息并更新/改變自己的狀態(tài)(處理與服務(wù)器上相同的突變);
更新本地版本號(hào)。
結(jié)果客戶端應(yīng)該具有相同的狀態(tài)。
客戶端可以檢測(cè)丟失的消息(與本地版本指示器相比,在有效負(fù)載中傳遞的版本號(hào))并強(qiáng)制 [re-] 查詢當(dāng)前(整個(gè))狀態(tài)。
更新
如果服務(wù)器端發(fā)生變化:
不受突變驅(qū)動(dòng)(其他應(yīng)用程序在同一個(gè)數(shù)據(jù)庫(kù)上運(yùn)行);
不是變化流,而只是新狀態(tài)(新狀態(tài)剛剛到達(dá)/從外部源讀?。?;
... - 您沒(méi)有機(jī)會(huì)將邏輯注入應(yīng)用更改的流程中 - 您應(yīng)該有一個(gè)正在運(yùn)行的監(jiān)控流程:
檢測(cè)狀態(tài)變化;
將狀態(tài)差異轉(zhuǎn)換為“補(bǔ)丁”集(fe 使用jiff);
將補(bǔ)丁作為消息發(fā)布給訂閱者。
客戶端將補(bǔ)丁(消息是一個(gè)流)解碼為本地狀態(tài)的突變(與服務(wù)器狀態(tài)同步)。如上所述 - 如果版本匹配或重新查詢整個(gè)狀態(tài),則應(yīng)用更改。
Graphql 只是一個(gè)通信通道(查詢、消息)——它沒(méi)有任何東西可以處理此任務(wù)所需的進(jìn)程(以及雙方的數(shù)據(jù))。
添加回答
舉報(bào)