如何设置 ApolloServer 和 SubscriptionServer 以在 graphql 中使用 http 和 ws
Posted
技术标签:
【中文标题】如何设置 ApolloServer 和 SubscriptionServer 以在 graphql 中使用 http 和 ws【英文标题】:How to setup ApolloServer and SubscriptionServer to use http and ws in graphql 【发布时间】:2020-09-17 09:56:42 【问题描述】:我一直在关注here 和here 的文档来实现subscriptions-transport-ws
插件。我最大的困惑是区分http://
和ws://
的graphql url。在上面的示例中,ApolloServer
似乎被 SubscriptionServer
取代。但是如果我只想在特殊情况下使用websockets,那我不是还需要两者吗?或者SubscriptionServer
是同时处理两者并在后台做一些魔术,根据是否调用订阅来确定使用哪一个?
【问题讨论】:
【参考方案1】:apollo-server
结合了几个工具,例如:graphql-tools、graphql-subscriptions、graphql-upload,提供一些custom errors,并使用express.js web 框架作为其默认的 web 服务器实现。
subscriptions-transport-ws
是一个 GraphQL WebSocket 服务器和客户端,用于通过 WebSocket 促进 GraphQL 查询、突变和订阅。
subscriptions-transport-ws 是 GraphQL 的扩展,您可以将它与任何 GraphQL 客户端和服务器(不仅是 Apollo)一起使用。
所以,ApolloServer
不被SubscriptionServer
替换。
不使用ApolloServer
,你需要自己设置使用express.js
、graphqlExpress
、graphiqlExpress
、cors
中间件的GraphQL HTTP服务器。就像official sample 一样。
如果要创建订阅服务器,则需要创建 HTTP 服务器并将其传递给 initing and connecting WebSocket server to http 的构造函数 initing and connecting WebSocket server to http
【讨论】:
请记住,subscriptions-transport-ws 没有得到积极维护:“subscriptions-transport-ws 库没有得到积极维护。建议您改用 graphql-ws 库。有关详细信息,请阅读 GraphQL over WebSockets 公告“以上是关于如何设置 ApolloServer 和 SubscriptionServer 以在 graphql 中使用 http 和 ws的主要内容,如果未能解决你的问题,请参考以下文章
ApolloServer 2.0 上下文和 GraphQL API 的公共/私有部分
我们如何从 apollo-server 模块传递 ApolloServer 中的数据源和合并的 graphql 模式和解析器?