亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 GraphQL 發送持久數據結構及其隨時間的變化?

如何使用 GraphQL 發送持久數據結構及其隨時間的變化?

慕碼人2483693 2022-10-18 17:36:22
我有一個反復出現的問題,我必須隨著時間的推移跟蹤數據結構并通過 GraphQL 傳遞它,例如,這可能是列表及其更改的時間線:[][1][1 2][-1 1 2][-1 2][2][]我正在尋找一個允許我描述此數據結構及其更改并自動找到正確的 graphql 表示以僅發布差異的庫?例如,它將上述結構分解為:start emptyadd 1add 2insert -1 in the beginningetc.在 GraphQL 術語中。以前有人解決過這個問題嗎?理想情況下是 ReasonML(前端)和 Python(后端),但要尋找任何示例。
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

您可以使用 graphql 訂閱(有關詳細信息,請參閱 apollo 文檔)。

在開始查詢當前狀態。雙方(服務器和客戶端)將擁有相同的數據。兩者都可以使用相同的庫,feimmutable.js

客戶端調用訂閱,開始監聽“onListChange”消息。

在服務器 insertElement, 上removeElementupdateElement解析器也在做同樣的事情:

  • 處理后端狀態的突變;

  • insert將(或remove)編碼updateactionType和所需的數據(突變參數、新創建的 id、版本號)為payload;

  • 使用發布將此('onListChange')消息發送給訂閱者。

客戶

  • 收到一條消息;

  • 解碼消息并更新/改變自己的狀態(處理與服務器上相同的突變);

  • 更新本地版本號。

結果客戶端應該具有相同的狀態。

客戶端可以檢測丟失的消息(與本地版本指示器相比,在有效負載中傳遞的版本號)并強制 [re-] 查詢當前(整個)狀態。

更新

如果服務器端發生變化:

  • 不受突變驅動(其他應用程序在同一個數據庫上運行);

  • 不是變化流,而只是新狀態(新狀態剛剛到達/從外部源讀取);

... - 您沒有機會將邏輯注入應用更改的流程中 - 您應該有一個正在運行的監控流程

  • 檢測狀態變化;

  • 將狀態差異轉換為“補丁”集(fe 使用jiff);

  • 將補丁作為消息發布給訂閱者。

客戶端將補?。ㄏ⑹且粋€流)解碼為本地狀態的突變(與服務器狀態同步)。如上所述 - 如果版本匹配或重新查詢整個狀態,則應用更改。

Graphql 只是一個通信通道(查詢、消息)——它沒有任何東西可以處理此任務所需的進程(以及雙方的數據)。


查看完整回答
反對 回復 2022-10-18
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號