【问题标题】:How to use Kuzzle & GraphQL & Apollo & Realtime如何使用 Kuzzle & GraphQL & Apollo & Realtime
【发布时间】:2020-09-13 03:43:51
【问题描述】:
我正在开发一组服务/应用程序来管理射箭比赛。
它包含一个 Web 应用程序,该应用程序将管理不同锦标赛的创建,并将处理弓箭手作为竞争者的订阅、邮件和分类。还有一个移动应用程序,将安装到几个平板电脑中,用于在比赛期间实时注释每个射手箭头点。
最后一部分将在无法访问外部互联网的本地网络中部署和使用(尽管它能够连接以检索锦标赛数据)。
所以我决定使用 kuzzle (https://kuzzle.io/) 作为后端,因为我可以在现场部署它,以角度和实时功能开发 Web 应用程序。
唯一没有涉及的是离线功能,所以如果注释板失去了与 kuzzle 服务器的连接,弓箭手必须仍然能够记下这些点。
因此,其中一个解决方案是将 GraphQl 端点定义为 kuzzle (https://github.com/kuzzleio/kuzzle-plugin-graphql) 并使用 Graphql 客户端,该客户端将允许某种离线缓存,例如 https://www.apollographql.com/,但我仍然会错过 kuzzle 提供的实时同步。
关于如何从 apollo graphql 查询映射到 kuzzle 运行时是否有任何方法/想法,以便后者可以更新 apollo 缓存?
还有其他配置更好吗?
【问题讨论】:
标签:
angular
graphql
real-time-updates
kuzzle
【解决方案1】:
Kuzzle 核心团队成员在这里。
TL;DR - Kuzzle 尚不支持 GQL 实时订阅。您可以使用 Kuzzle 实时引擎订阅数据并重新触发 GQL 查询。
Kuzzle SDK 提供的当前离线功能使您能够在重新连接时恢复实时订阅,并重播离线时无法发送到服务器的排队操作,但实际上对您应该如何处理没有意见(也没有工具)处理未同步的数据。
在这种情况下,拥有两个可能不同步的数据存储(后端和前端)会很复杂(由于连接受限),特别是如果您需要查询 数据。
存在许多前端数据库解决方案,但它们意味着您应该在每次数据获取(使用不同的 DSL)上加倍查询,然后协调结果,因为它们可能会有所不同。这不是不可能,但这是一种努力。
这是将 GraphQL 与 Kuzzle 结合使用的一个很好的动机,这是一个不错的选择,但尚不支持 GraphQL 实时查询,因此您将无法使用 GQL 查询来表达您的实时订阅过滤器.核心团队正在积极考虑在今年为他们提供支持。
一种解决方法是暂时放弃 GQL 实时查询并使用 Kuzzle 进行订阅(通过realtime.subscribe 调用)。每次订阅收到通知时,它都会重新触发 GQL 查询以获取新数据集。唯一的开销是您的订阅过滤器必须在 Koncorde DSL 中表示,这在规模上可能很烦人,但恕我直言,仍然可行。