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

Afs*_*bbi 12 websocket socket.io graphql graphql-subscriptions

我有两个方面。

一方面,我通过使用 ws(Node.js WebSocket 库)或 Socket.io 等库/包来直接使用 WebSocket 协议。在这里,我可以使用测试工具来订阅和处理以ws“或wss喜欢”开头的内容ws://localhost:8080并接收更新。

另一方面,我通过使用 GraphQL 订阅等组件来使用 GraphQL 订阅ApolloGraphQL。看来这样我应该使用 GraphQL 中嵌入的东西。用这种方式开发的项目无法通过ws://wss://地址访问,或者至少我不知道。

我的问题是两者之间有什么区别?GraphQL 订阅是建立在 WebSocket 之上的吗?如果是,怎么办?如何通过ws://wss://url 访问 GraphQL 订阅?

更新:我之前读过这个这个问题,但它们没有多大帮助。

Phi*_*hun 24

GraphQL 是一种规范,通常可以通过 HTTP 看到 GraphQL 来进行查询和变更,但是通过 GraphQL 订阅,我们需要从 API 接收持续更新。这就是 WebSocket 的用武之地。

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

两个值得注意的实现是:

  • subscriptions-transport-ws它是由 Apollo 团队制作的(因此在 Apollo Server 中得到了大力支持),但不再被积极维护
  • graphql-ws这是一个后续项目(有轻微的不兼容性)。它的自述文件确实解释了如何将其添加到 Apollo 服务器。

这些只是具有服务器端和客户端实现的协议库,以促进 GraphQL 操作并通过 WebSocket 发送结果。因此,它们减轻了您的大量工作量,您必须提出自己的协议或在 WebSocket 以外的其他协议上实现协议。

  • 您可以在浏览器开发者控制台的网络选项卡下查看 websocket GraphQL 流量。 (2认同)