我需要在我的iOS应用程序中集成subscription。subscription在graphiql中的localhost上运行良好。我已经在Heroku上部署了我的后端。我使用的是apollo-server而不是hasura。我的subscriptions对Heroku提供的url不起作用,但在localhost上运行得很好。Queries和mutations在localhost和Heroku url上都工作得很好。因此,我尝试从我的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)我还尝试用ws替换http,如下所示
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时,我得到以下错误。

发布于 2020-06-18 21:19:03
所以我的ios Code没有问题。问题出在我正在使用的免费Heroku层。我试着用Hasura's Subscription https://hasura.io/learn/graphql/ios/subscriptions/1-subscription/替换我的subscription,它工作正常。
https://stackoverflow.com/questions/62241942
复制相似问题