如何使 Flutter graphql 订阅与轮渡包一起使用?
Posted
技术标签:
【中文标题】如何使 Flutter graphql 订阅与轮渡包一起使用?【英文标题】:how can I make Flutter graphql subscription work with ferry package? 【发布时间】: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());
);
我的代码有什么问题?请帮忙!
【问题讨论】:
【参考方案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']),
);
【讨论】:
以上是关于如何使 Flutter graphql 订阅与轮渡包一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何配置graphql-flutter和apollo sever以使应用程序停止与websocket断开连接
Amplify Flutter:如何连接到现有的 GraphQL 端点
如何将 socket.io 与 graphql 订阅一起使用?
如何在 Apollo 中关闭 GraphQL 订阅的套接字连接