1 回答

TA贡献1871条经验 获得超13个赞
您可以使用 graphql 订阅(有关详细信息,请参阅 apollo 文档)。
在开始查询当前状态。双方(服务器和客户端)将拥有相同的数据。两者都可以使用相同的库,feimmutable.js
客户端调用订阅,开始监听“onListChange”消息。
在服务器 insertElement
, 上removeElement
,updateElement
解析器也在做同样的事情:
处理后端状态的突变;
insert
将(或remove
)编码update
为actionType
和所需的数据(突变参数、新创建的 id、版本号)为payload
;使用发布将此('onListChange')消息发送给订阅者。
客户:
收到一条消息;
解码消息并更新/改变自己的状态(处理与服务器上相同的突变);
更新本地版本号。
结果客户端应该具有相同的状态。
客户端可以检测丢失的消息(与本地版本指示器相比,在有效负载中传递的版本号)并强制 [re-] 查询当前(整个)状态。
更新
如果服务器端发生变化:
不受突变驱动(其他应用程序在同一个数据库上运行);
不是变化流,而只是新状态(新状态刚刚到达/从外部源读取);
... - 您没有机会将逻辑注入应用更改的流程中 - 您应该有一个正在运行的监控流程:
检测状态变化;
将状态差异转换为“补丁”集(fe 使用jiff);
将补丁作为消息发布给订阅者。
客户端将补丁(消息是一个流)解码为本地状态的突变(与服务器状态同步)。如上所述 - 如果版本匹配或重新查询整个状态,则应用更改。
Graphql 只是一个通信通道(查询、消息)——它没有任何东西可以处理此任务所需的进程(以及双方的数据)。
添加回答
举报