当前位置: 首页 > 知识库问答 >
问题:

GraphQL订阅和WebSocket协议有什么不同?

毕魁
2023-03-14

我有两面性。

一方面,通过使用ws(一个node.js WebSocket库)或socket.io之类的库/包,我可以直接使用WebSocket协议。在这里,我可以使用测试工具从wsws开始订阅和寻址,比如ws://localhost:8080并接收更新。

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

我的问题是两者之间有什么不同?GraphQL订阅是构建在WebSocket之上的吗?如果是,怎么做?如何通过ws://wss://URL访问GraphQL订阅?

更新:我以前读过这个和这个问题,但他们没有很大帮助。

共有1个答案

焦正德
2023-03-14

GraphQL是一个规范,在HTTP上看到GraphQL进行查询和突变是很常见的,但是对于GraphQL订阅,我们需要从API接收持续的更新。这就是网络套接字的用武之地。

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

两个值得注意的实现是:

  • subscriptions-transport-ws,它是由Apollo团队制作的(因此在Apollo Server中得到了很好的支持),但不再进行主动维护
  • graphql-ws,这是一个后续项目(略有不兼容)。它的自述文件解释了如何将其添加到Apollo服务器。

这些只是带有服务器端和客户端实现的协议库,以方便通过WebSockets发送GraphQL操作和结果。因此,它们使您不必制定自己的协议或在WebSockets以外的东西上实现协议。

 类似资料:
  • WebSocket和STOMP协议的主要区别是什么?

  • 我在Apollo中的GraphQL订阅遇到了麻烦。我想订阅关于主题的添加“透视图”(基本上是在帖子上添加评论),我很确定我已经正确地设置了服务器。客户才是给我带来麻烦的人。(如果这个问题看起来很熟悉,我以前问过它,以为我得到了答案,但没有去)。下面是我的订阅模式: 我也正确地连接了客户端,因为在我的终端中,我看到了“WebSocket connection Selected”消息。我被难倒的部分是

  • 我正在尝试在服务器上实现基于GraphQLWebSocket的@订阅(使用NestJS@subscription)。服务器托管在AWS ECS上,位于ALB后面。我们目前通过VPC链接与ALB建立了AWS API GW连接。 我试图用我们在HTTP API GW中使用的相同的VPC链接构建一个专用的Websocket API GW。我还试图在我们的ECS上安装一个新的NLB(网络负载平衡器),并在

  • 我按照Apollo的文档在客户端和服务器上设置GraphQL订阅,虽然我已经完成了90%,但我不知道如何设置订阅通道以及如何将突变连接到这些通道,以便每当突变发生时,服务器都会将新数据推送到客户端。(对于内容,我正在制作一个Reddit克隆,人们可以在其中发布主题,其他人可以对其发表评论。所以当你看到“Topics”或“TopicList”时,把它们想象成帖子。) 到目前为止,我已经成功地为订阅设

  • 目前Workerman的WebSocke协议版本为13 WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信 WebSocket与TCP关系 WebSocket和HTTP一样是一种应用层协议,都是基于TCP传输的,WebSocket本身和Socket并没有多大关系,更不能等同。 WebSocket协议握手 WebSocket协议有一个握手的过程,握手时浏

  • 我正在学习如何使用gem在Rails应用程序中实现GraphQL API。我不清楚GraphQL订阅的用例。 我不清楚GraphQL订阅和ActionCable之间的区别。 假设我有一个从GraphQL API获取数据的移动应用程序。 我是否可以直接使用ActionCable将更改发布到移动客户端?如果是,那么为什么要使用GraphQL订阅呢?