GraphQL 是一种用于 API 构建的查询语言和运行时。它可以让客户端定义 API 响应的结构,从而减小了来自服务器的过量请求,提高了 API 的性能。在 GraphQL 中,Subscriptions 允许建立穿过 WebSockets 的实时连接,用于向客户端推送实时更新。
Subscriptions 的实现
GraphQL Subscriptions 由客户端和服务端两部分组成,客户端负责接收实时数据,而服务端负责推送实时数据。
客户端实现
在客户端中,使用 subscriptions-transport-ws
库,该库提供了创建 WebSockets 连接的方法。下面是一个基本的客户端实现示例:
-- -------------------- ---- ------- ------ - ------------------ - ---- ---------------------------- ----- ------------------ - --- ------------------------------------------------- - ---------- ----- ----- ----- -- ----- ----- - ---- ------------ - --------- - -- ----- --------- - - - ----- ---------- - ---------------------------- ----- -- ---------------------- ----- ---- -- ---------------- ----- -- ------ ------ ----- -- ------------------------- ------ -- ------- --展开代码
服务端实现
在服务端上,首先需要创建一个 WebSocket 服务,然后使用 graphql-subscriptions
库来实现订阅和发布事件。下面是一个基本的服务端实现示例:
-- -------------------- ---- ------- ------ - ------------ - ---- --------------- ------ - -------- --------- - ---- --------- ------ - ------------------ - ---- ---------------------------- ------ ------ ---- ---------- ------ - ---- - ---- --------------- ----- ------ - --- -------------- ------ -- ----------------------- --- -- -- - --------------- ------ ----- -- -------- --- ------------------- - -------- ---------- ------- -- ------ ---------- -------- ------- -- - ------------------- ----------- -- ------------- ----------- -------- -- - ------------------- -------------- -- -- - ------- ------------------ ----- ----------- - - --展开代码
Subscriptions 的最佳实践
限制字段数量
GraphQL Subscriptions 在实时通信过程中,会发送大量的数据,因此必须有限制范围。推荐使用 withFilter
方法,在特定条件下只发送有限的数据:
-- -------------------- ---- ------- ------ - ------- ---------- - ---- ----------------------- ----- ---------- - ------------ ----- ------ - --- -------- ----- -------- - --- ------------------- ----- ------- ------- -- -- -- --- - ----- --------- -- ------ - ----- ------------- -- ---------- - ----- ----------- -- --- -- ----- ----------------- - --- ------------------- ----- ---------------- ------- -- -- -- ---------- - ----- --------- ---------- -- -- --------------------------------- -------- ------- -- ------------------ ----- - --------- - ----- ------------- -- -- -- --- -- ----- --------------------- - ----------- -- -- --------------------------------- --------- ---------- -- - ------ ----------------- --- ---------------- - - -------------------------- - ---------- - --- ---- ------ ---- ------ ---------- --- ------- --------- ------------ -- --展开代码
使用 Redis 存储和获得相关数据
Redis 是一种高效且广泛使用的数据存储引擎,用于缓存和存储实时数据。订阅服务器可以使用 Redis 缓存/存储订阅生成的数据,以便更快地获取数据以及在缩放服务器时避免数据重复处理。
监控程序性能
GraphQL Subscription 是一个在程序性能方面需要考虑的关键区域,因此必须定期监控程序性能,以便能够解决订阅过程中可能遇到的问题。
结语
GraphQL Subscriptions 为客户端提供了实时更新功能,并通过 WebSockets 协议进行实时通信。理解了 Subscriptions 的实现和最佳实践,开发者可以更高效的创建分布式系统,并且能够更好地掌控和管理程序性能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ceb58fe46428fe9e94afdb