【问题标题】:how can I make Flutter graphql subscription work with ferry package?如何使 Flutter graphql 订阅与轮渡包一起使用?
【发布时间】:2021-10-27 01:38:43
【问题描述】:

我有一个带有 apollo-server 的 graphql api。我使用 Graphql Playground 测试了所有查询、突变和订阅。

我正在使用 Ferry 包作为 grapqhl 客户端在 Flutter 中开发客户端应用程序。所有查询和突变都可以正常工作,但订阅却不行。

发送订阅请求时,websocket 连接已建立,但订阅未启动。我在 Graphql Playground 上测试了订阅,连接请求消息是这样的

Graphql Playground network panel

但使用轮渡客户端时,它会卡在 connection_init 上

Flutter Web app network panel

var link = WebSocketLink(
      "ws://localhost:4000/graphql",
      initialPayload: {"subscriptionParam": arg},
    );
var client = Client(link: link);
client.request(request).listen((data) {//request is an object from autogenerated class from ferry
      log(data.toString());//never gets here
    }, onError: (error, stack) {
      log("Subscription error: " + error.toString());
    }); 

我的代码有什么问题?请帮忙!

【问题讨论】:

    标签: flutter graphql subscription apollo-server


    【解决方案1】:

    所以伙计们,我解决了我的问题,问题与链接未在连接请求标头上发送 Sec-WebSocket-Protocol:graphql-ws 有关。所以我把链接初始化改成:

    final link = WebSocketLink(
          null, //Global.graphqlWsServerUrl,
          autoReconnect: true,
          reconnectInterval: Duration(seconds: 1),
          initialPayload: {"subscriptionParam": arg},
          channelGenerator: () => WebSocketChannel.connect(Uri.parse(Global.graphqlWsServerUrl), protocols: ['graphql-ws']),
        );
    

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 2017-11-11
      • 2017-03-17
      • 2019-03-01
      • 2019-08-14
      • 2022-06-18
      • 2020-11-08
      • 2019-11-27
      • 2020-11-17
      相关资源
      最近更新 更多