1 回答

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