【问题标题】:Subscription Failure Error WSError(type: Starscream.ErrorType.upgradeError message: \"Invalid HTTP upgrade\", code: 400)?订阅失败错误 WSError(type: Starscream.ErrorType.upgradeError message: \"Invalid HTTP upgrade\", code: 400)?
【发布时间】:2020-09-26 05:31:52
【问题描述】:

我需要在我的 iOS 应用程序中集成 subscriptionsubscriptionlocalhost 中的 graphiql 上运行良好。我已经在Heroku 上部署了我的后端。我使用的是apollo-server 而不是hasura。我的 subscriptions 不适用于 Heroku 提供的 url,但它在 localhost 上运行良好。 Queriesmutations 适用于 localhostHeroku url。所以我试图从我的 iOS 客户端访问我的subscription。我将基本网址保留为我的本地主机。查询和突变部分适用于我的 iOS 客户端,但我的 subscription 部分不起作用。

我已经通过添加这个配置了我的 Apollo 客户端以进行订阅

let httpNetworkTransport = HTTPNetworkTransport(url: URL(string: "http://localhost:5000")!)
        httpNetworkTransport.delegate = self

        let webSocketTransport = WebSocketTransport(request: URLRequest(url: URL(string: "http://localhost:5000")!))


         let splitNetworkTransport = SplitNetworkTransport(
          httpNetworkTransport: httpNetworkTransport,
          webSocketNetworkTransport: webSocketTransport
        )

        return ApolloClient(networkTransport: splitNetworkTransport)

我还尝试将http 替换为ws,如下所示

let webSocketTransport = WebSocketTransport(request: URLRequest(url: URL(string: "ws://localhost:5000")!))

订阅代码如下

subscription = Network.shared.apollo.subscribe(subscription: GetHealthConsultationSubscriptionSubscription()){
            [weak self] result in
            guard let self = self else {
                return
            }
            switch result {
            case .success(let result):
                debugPrint(result.data?.healthConsultation.chiefComplaint)

            case .failure(let error):
                debugPrint(" Subscription Failure Error \(error)")
            }
        }

但我从我的 iOS 客户端收到如下错误

" Subscription Failure Error WSError(type: Starscream.ErrorType.upgradeError, message: \"Invalid HTTP upgrade\", code: 400)"

此外,当我使用Graphiql 订阅并将localhost 替换为订阅的Heroku url 时,我收到以下错误。

【问题讨论】:

  • @xadm 我的 api 没有任何标题
  • 也许你应该有?这会阻止您测试这个有效的解决方案吗?
  • @xadm 是的,否则我的代码与您提到的答案相同。我没有任何 API 密钥

标签: ios swift graphql apollo-server apollo-ios


【解决方案1】:

所以我的ios Code 没有问题。问题在于我正在使用的Heroku 免费层。我尝试用Hasura's Subscription https://hasura.io/learn/graphql/ios/subscriptions/1-subscription/ 替换我的subscription,它可以工作。

【讨论】:

  • 感谢您及时通知我们
  • 嗨,你能告诉我更多关于为什么 heroku 免费层会抛出这个错误的信息吗?
猜你喜欢
  • 2023-03-26
  • 2015-06-04
  • 1970-01-01
  • 2019-01-31
  • 2016-09-17
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多