如何让 GraphQL 在不轮询的情况下从数据库中获取 live/new 数据?

How do I get GraphQL to get live/new data from database without polling?

我有一个后端 运行 GraphQL、MongoDB + Mongoose 和 Apollo。此应用程序具有用户帐户和朋友列表的功能。每个用户都可以登录到他们的帐户并查看当前 'status' 的好友列表;如果朋友更改了他们的状态,我需要将更改反映在用户方面。这方面的一个例子就像 facebook 在 Messenger 上的“绿点”,它会在您的一位朋友使用该应用程序在线时告诉您。

我一直在搜索 GraphQL 的文档,并被建议订阅或实时查询。据我了解,订阅似乎是大多数建议,实时查询不是 GraphQL 的正式部分或已被删除。

有没有人有解决方案来使用 GraphQL/MongoDB 获取“实时”数据而不涉及针对这种情况的轮询?

您似乎已经有了答案:subscriptions!

使用您的示例,考虑两个用户 - mikep17 和 mcy。你是 mikep17,登录到你的应用程序并查看你的朋友列表和他们的状态。我是你的朋友,我在你查看此列表时登录,你想在你的应用程序的 UI.

中看到它

在前端,在您的应用程序实例中,您的应用程序将执行对某个事件的订阅。我们称它为 friendStatusChange。现在您的应用程序正在“侦听”该事件以便做出相应的响应。假设当您的应用程序接收到该事件时,它可以解析出“我”(mcy)已从 offline => online 更改的信息,然后使用它来添加下一个“绿点”到我的用户名。

在后端,您的 GraphQL 服务器将具有处理用户功能的代码 - 登录、注销等。需要对其进行增强以挂接到这些操作并“发布”friendStatusChange适用的事件。

现在,您的客户端不再不断询问(轮询)“朋友的状态改变了吗?现在怎么样?现在?”,它可以只听并等待您的服务器轻拍它的肩膀说“嘿朋友,你的朋友 mcy 状态改变了。