GraphQL 订阅和 WebSocket 协议有什么区别?
What are differences between GraphQL Subscription and WebSocket protocol?
我有两个方面。
一方面,我通过使用 libraries/packages 像 ws(一个 Node.js WebSocket 库)或 Socket.io 来直接使用 WebSocket 协议。在这里,我可以使用测试工具来订阅和处理以 ws
或 wss
开头的地址,例如 ws://localhost:8080
并接收更新。
另一方面,我通过 ApolloGraphQL
等组件来使用 GraphQL 订阅。看来这样我应该使用嵌入在 GraphQL 中的东西。用这种方式开发的项目不能通过ws://
或wss://
地址访问,至少我不知道。
我的问题是两者之间有什么区别? GraphQL 订阅是建立在 WebSocket 之上的吗?如果是,如何?如何通过 ws://
或 wss://
url 访问 GraphQL 订阅?
更新:
我以前读过 this and 问题,但他们没有太大帮助。
GraphQL 是一种规范,在 HTTP 上看到 GraphQL 用于查询和变更很常见,但是对于 GraphQL 订阅,我们需要从 API 接收持续更新。这就是 WebSocket 的用武之地。
WebSockets 通常用作 GraphQL 订阅的传输协议。因此,为了回答您的问题,GraphQL 订阅不受任何协议的约束。事实上,GraphQL 查询和变更也不限于 HTTP。因此,基于 WebSocket 的 GraphQL 订阅库实现了一个小型协议,它们通过该协议发送 GraphQL 订阅操作和结果。
两个值得注意的实现是:
subscriptions-transport-ws
由 Apollo 团队制作(因此在 Apollo Server 中得到了大力支持)但不再积极维护
graphql-ws
这是一个后续项目(有轻微的不兼容性)。它的自述文件确实解释了如何将它添加到 Apollo 服务器。
这些只是具有服务器端和客户端实现的协议库,以促进 GraphQL 操作和通过 WebSockets 发送的结果。因此,他们从您必须提出自己的协议或在 WebSockets 以外的其他东西上实现协议的工作中解放出来。
我有两个方面。
一方面,我通过使用 libraries/packages 像 ws(一个 Node.js WebSocket 库)或 Socket.io 来直接使用 WebSocket 协议。在这里,我可以使用测试工具来订阅和处理以 ws
或 wss
开头的地址,例如 ws://localhost:8080
并接收更新。
另一方面,我通过 ApolloGraphQL
等组件来使用 GraphQL 订阅。看来这样我应该使用嵌入在 GraphQL 中的东西。用这种方式开发的项目不能通过ws://
或wss://
地址访问,至少我不知道。
我的问题是两者之间有什么区别? GraphQL 订阅是建立在 WebSocket 之上的吗?如果是,如何?如何通过 ws://
或 wss://
url 访问 GraphQL 订阅?
更新:
我以前读过 this and
GraphQL 是一种规范,在 HTTP 上看到 GraphQL 用于查询和变更很常见,但是对于 GraphQL 订阅,我们需要从 API 接收持续更新。这就是 WebSocket 的用武之地。
WebSockets 通常用作 GraphQL 订阅的传输协议。因此,为了回答您的问题,GraphQL 订阅不受任何协议的约束。事实上,GraphQL 查询和变更也不限于 HTTP。因此,基于 WebSocket 的 GraphQL 订阅库实现了一个小型协议,它们通过该协议发送 GraphQL 订阅操作和结果。
两个值得注意的实现是:
subscriptions-transport-ws
由 Apollo 团队制作(因此在 Apollo Server 中得到了大力支持)但不再积极维护graphql-ws
这是一个后续项目(有轻微的不兼容性)。它的自述文件确实解释了如何将它添加到 Apollo 服务器。
这些只是具有服务器端和客户端实现的协议库,以促进 GraphQL 操作和通过 WebSockets 发送的结果。因此,他们从您必须提出自己的协议或在 WebSockets 以外的其他东西上实现协议的工作中解放出来。