首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置graphql-flutter和apollo服务器使应用程序停止从websocket断开连接

如何配置graphql-flutter和apollo服务器使应用程序停止从websocket断开连接
EN

Stack Overflow用户
提问于 2020-10-01 05:19:01
回答 1查看 621关注 0票数 2

我在flutter上构建应用程序,其中我使用graphql-flutter包,我的配置如下所示:

代码语言:javascript
复制
final WebSocketLink websocketLink = WebSocketLink(
    url: subscriptionUri,
    config: SocketClientConfig(
        autoReconnect: true,
        initPayload: () {
          return authTokenService.addAuthHeader(EnvVariables.currentHost);
        }));

link = link.concat(websocketLink);

同样在后端,我使用带有订阅的Apollo graphql和PubSub的redis,它的condfig看起来像这样:

代码语言:javascript
复制
this.pubsub = new RedisPubSub({
            publisher: new Redis(process.env.REDIS_URL),
            subscriber: new Redis(process.env.REDIS_URL),
        });

和阿波罗

代码语言:javascript
复制
const apolloServer = new ApolloServer({
    schema,
    subscriptions: {
        keepAlive: 30000,  
    }...

所有这些都托管在Heroku上(不是prod环境--也许这是一个问题),所以我的应用程序总是断开连接,然后重新连接到websocket。

就在断开连接之前,我收到一条消息: 30秒内没有收到keep alive消息。正在断开连接...

但是如果我将null传递给graphql-flutter包中的inactivityTimeout

代码语言:javascript
复制
final WebSocketLink websocketLink = WebSocketLink(
    url: subscriptionUri,
    config: SocketClientConfig(
        autoReconnect: true,
        inactivityTimeout: null,
        initPayload: () {
          return authTokenService.addAuthHeader(EnvVariables.currentHost);
        }));

link = link.concat(websocketLink);

在一段时间后,应用程序会抛出达到- max重试次数限制的错误。

那么我应该如何正确配置两端呢?我应该发送keepAlive消息还是在颤动端忽略它们,但是如何避免最大重试错误?或者我应该手动发送任何消息到通道以使其保持活动状态,就像这里所说的:https://devcenter.heroku.com/articles/play-java-websockets-advanced (但我希望apollo服务器会为我做这件事……)

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-06-30 03:34:02

由于这个库没有可用的维护者,所以我使用了自定义fork,其中替换了websocket客户端。https://github.com/zino-app/graphql-flutter/issues/892

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64145876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档