GraphQL 是现代化的 API 查询语言和运行时,它可以用于从服务端获取需要的数据。而当需要实时化的数据查询时,GraphQL 提供了一种便捷的方式:基于 WebSocket 的 Subscriptions。
Subscriptions 是什么?
Subscriptions 是一种 GraphQL 的查询类型,它可以用于实时订阅服务端推送的数据。Subscriptions 类型的查询与普通的 Query 和 Mutation 类型有所不同,它需要在服务端实现对应的订阅服务器,并且在客户端以 WebSocket 协议的形式连接到该订阅服务器上,以便实时接收来自服务端的数据更新。
Subscriptions 类型的查询可以让前端应用快速响应、更新用户界面,并为在多个用户之间实现实时数据传输提供基础。
GraphQL Subscriptions 的使用
为了使用 GraphQL Subscriptions,需要在客户端使用 subscriptions-transport-ws
包,它是一个 WebSocket-transport 的实现,它允许通过 WebSocket 与 GraphQL 服务器通信。
在客户端实现 Subscriptions 相关代码如下所示:
-- -------------------- ---- ------- ------ - ------------- ------------- - ---- ----------------- ------ - ------------- - ---- ------------------------- ----- ------ - --- --------------- ---- ------------------------------ -------- - ---------- ---- - --- ----- ------ - --- -------------- ----- ------- ------ --- --------------- ---展开代码
值得注意的是,在服务端上实现 Subscriptions 需要使用 subscriptions-transport-ws
库作为 HTTP 框架的中间件。这个库可以将 WebSocket 解释为 HTTP 请求。
在服务端实现 Subscriptions 相关代码如下所示:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ------------ - - ---------------- ----- - -------- --------- - - ------------------- ----- - ------------------ - - -------------------------------------- ----- - ------------- --- - - --------------------------------- ----- --- - ---------- ----- -------- - ---- ---- ----- - ------ ------ - ---- ------------ - ---------- ------ - -- --- ------- - -- ----- --------- - - ------ - ------ -- -- ------ ------- -- ------------- - ---------- - ---------- -- -- -------------- -- ---------- ------ -------- -- -- -------- --- ----------- - - -- ----- ------ - --- -------------- --------- --------- --- ------------------------ --- --- ----- ---------- - ------------------ ------------------- ----- ---- -- -- -- - --------------- ------ ----- -- --------------------------------------------- --- -------------------- -------- ---------- ------- ------------- -- - ------- ----------- ----- ------------------ --- ---展开代码
在这个例子中,服务端实现了一个简单的 Subscription,每隔 1 秒更新一次计数器的值,并将此值作为服务端发送的更新数据。而客户端实现了一个 WebSocket 连接,以订阅该 Subscription 并接收来自服务端的计数器值更新数据。
结语
GraphQL Subscriptions 提供了一种便捷的方式,可以在服务端向客户端推送实时数据更新。而 WebSocket 是实现 GraphQL Subscriptions 的标准协议之一。在实际开发过程中,若需要利用 GraphQL 获取实时数据,可选择使用 Subscriptions,并使用对应的 WebSocket 实现进行数据传输。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ceb775e46428fe9e94f2d4