订阅失败错误WSError(类型:Starscream.ErrorType.upgradeError消息:\“无效的HTTP升级\”,代码:400)?

时间:2020-06-07 06:57:51

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

我需要在我的iOS应用中集成subscriptionsubscriptionlocalhost中的graphiql上可以正常工作。我已经在Heroku上部署了后端。我正在使用apollo-server而不是hasura。我的subscriptions不适用于Heroku给出的网址,但在localhost上可以正常使用。 Queriesmutations对于localhostHeroku网址都可以正常工作。因此,我试图从我的iOS客户端访问我的subscription。我将基本URL保留为本地主机。查询和突变部分适用于我的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的订阅网址时,也会出现以下错误。

s

1 个答案:

答案 0 :(得分:1)

所以我的ios Code没问题。问题出在我正在使用的Heroku的免费套餐中。我尝试将subscription替换为Hasura's Subscription https://hasura.io/learn/graphql/ios/subscriptions/1-subscription/,并且有效。