0

Hasura GraphQL 引擎部署在由 AWS 支持的 Cloudfoundry 实例上,它通过 AWS ELB 在子域中公开。控制台在https://hasura.cloud.domain.com/console公开, GraphQL API 在https://hasura.cloud.domain.com/v1alpha1/graphql接受查询。

但是当从控制台执行订阅时,JS 控制台上的以下日志会发生错误:

vendor.js:1 WebSocket connection to 'wss://hasura.cloud.domain.com/v1alpha1/graphql' failed: Error during WebSocket handshake: Unexpected response code: 200

分析 Chrome 上的 websocket 帧表明(Opcode -1).

基本上,客户端无法打开 websocket 连接。

4

1 回答 1

0

一些负载均衡器不支持将包含 Upgrade 标头的 WebSocket 握手请求传递到 CF 路由器。例如,Amazon Web Services (AWS) 弹性负载均衡器 (ELB) 不支持此行为。在这种情况下,您必须将负载均衡器配置为将 TCP 流量转发到 CF 路由器以支持 WebSocket。

参考:https ://docs.cloudfoundry.org/adminguide/supporting-websockets.html#config

基本上,AWS ELB 和 CF 路由器需要一些配置才能使 websocket 正常工作。这通常通过设置一个非标准端口来将所有 TCP 连接转发到 CF 路由器来完成。我们从客户那里得知,这个端口通常是 4443。

因此,要使 websocket 连接正常工作,请选择端点作为wss://hasura.cloud.domain.com:4443/v1alpha1/graphqlwebsocket 连接和订阅。

控制台也可以在https://hasura.cloud.domain.com:4443打开。

于 2019-03-22T06:34:34.257 回答