我有两面。
一方面,我通过使用ws (一个WebSocket WebSocket库)或Socket.io等库/包来直接使用WebSocket协议。在这里,我可以使用测试工具订阅ws或wss (比如ws://localhost:8080 )并进行地址处理,并接收更新。
另一方面,我通过使用像GraphQL这样的组件使用ApolloGraphQL订阅。这样看来,我应该使用嵌入在GraphQL中的东西。用这种方式开发的项目不能通过ws://或wss://地址访问,或者至少我不知道。
我的问题是,两者有什么区别?GraphQL订阅是建立在WebSocket之上的吗?如果是,怎么做?如何通过GraphQL或wss:// urls访问wss://订阅?
发布于 2021-05-24 15:30:56
GraphQL是一种规范,使用GraphQL进行查询和突变是很常见的,但是对于GraphQL订阅,我们需要接收来自GraphQL的连续更新。这就是WebSockets进来的地方。
WebSockets经常用作GraphQL订阅的传输协议。因此,要回答您的问题,GraphQL订阅不绑定到任何协议。事实上,GraphQL查询和突变也不限于HTTP。因此,基于WebSocket的GraphQL订阅库实现了一个小协议,它们通过该协议发送GraphQL订阅操作和结果。
两个值得注意的实现是:
subscriptions-transport-ws是由阿波罗团队开发的(因此在阿波罗服务器上得到了很大的支持),但是并没有积极维护anymoregraphql-ws,这是一个后续项目(略有不兼容)。它的自述文件解释了如何将其添加到阿波罗服务器.这些只是带有服务器端和客户端实现的协议库,以方便GraphQL操作和通过WebSockets发送结果。因此,它们占用了大量的工作,使您不得不想出自己的协议,或者在WebSockets之外的其他东西上实现协议。
https://stackoverflow.com/questions/67659937
复制相似问题