GraphQL订阅和WebSocket协议有什么区别?

12

我有两种方式。

首先一种是直接使用WebSocket协议,通过像ws(一个Node.js的WebSocket库)或Socket.io这样的库/包。在这里,我可以使用测试工具来订阅以wswss开头的地址,例如ws://localhost:8080,并接收更新。

另一种方式是使用组件,如ApolloGraphQL实现GraphQL Subscription,这种方式似乎应该使用GraphQL中嵌入的某些东西。使用此方式开发的项目不能通过ws://wss://地址进行访问,至少我不知道。

我的问题是这两种方式之间有什么区别?GraphQL Subscription是建立在WebSocket之上的吗?如果是,那它是如何建立的?如何通过ws://wss:// url访问GraphQL Subscription?

更新:我之前阅读了这个这个问题,但它们没有提供很多帮助。

1个回答

24

GraphQL是一个规范,通常使用GraphQL over HTTP进行查询和变更,然而对于GraphQL订阅,我们需要从API接收持续的更新。这就是WebSockets的作用。

WebSockets通常用作GraphQL Subscriptions的传输协议。因此,回答你的问题,GraphQL Subscriptions并不限定于任何协议。事实上,GraphQL查询和变更也不仅限于HTTP。因此,基于WebSocket的GraphQL Subscriptions库实现了一个小协议,通过该协议发送GraphQL订阅操作和结果。

两个著名的实现包括:

  • subscriptions-transport-ws 是由Apollo团队制作的(因此在Apollo Server中得到了很好的支持),但已经不再积极维护。
  • graphql-ws 是一个后继项目(存在轻微的不兼容性)。其说明文档介绍了如何将其添加到Apollo Server中。

这些只是协议库,具有服务器端和客户端实现,以便通过WebSockets发送GraphQL操作和结果。因此,它们会消除你自己打造协议或在其他东西上实现协议的大部分工作。


1
工具方面怎么样?我如何查看GraphQL订阅的流量? - Afshar Mohebi
1
您可以在浏览器开发者控制台的网络选项卡下查看Websocket GraphQL流量。 - Tore Nestenius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接