【问题标题】:HTTP heartbeat to avoid connection drop for long running http callsHTTP 心跳以避免长时间运行的 http 调用的连接断开
【发布时间】:2019-04-24 19:35:45
【问题描述】:

我在 Heroku PaaS 上部署了一个应用程序。

他们有这样的超时政策 (https://devcenter.heroku.com/articles/request-timeout):

30 秒,每在连接中发送或接收一个字节就延长 55 秒。

我有可能需要一段时间的 http 端点(上传文件,需要一些时间来摄取它,然后返回 200 ok)。 如果处理时间超过 30 秒,Heroku 路由器将断开连接,整个过程中止。

有普通的 HTTP/JSON API 端点。 客户端是 Angular 6+,服务器是 Spring Boot 2+(Spring MVC,没有响应式的东西)。

我知道我可以使流程异步,无需向我指出那个方向。

问题是:有没有办法在处理数据的同时从浏览器或服务器端继续在连接中发送内容?

某种保活噪音,例如可以在 SSH 连接中执行的操作。

我可以在 Angular 应用程序中添加一些作为拦截器的东西会很完美。

【问题讨论】:

    标签: angular http spring-boot heroku timeout


    【解决方案1】:

    在我们的应用程序中,我们可以向 api 发送简单的请求,以便登录保持活动状态。也许您可以为您的应用做类似的事情?

    return this.http
          .get('login_url')
          .pipe(
            map(() => {
              console.log('Heartbeat OK.');
              localStorage.setItem('isAuthenticated', 'true');
              return '1';
            }),
            timeout(this.appConfigService.getConfig().heartbeatTimeout),
            catchError(() => {
              console.log('Heartbeat Error');
              localStorage.setItem('isAuthenticated', 'false');
              return '0';
            }),
            retry(),
            delay(this.appConfigService.getConfig().heartbeatDelay),
            repeat()
          );

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 2019-08-04
      • 2021-10-17
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      相关资源
      最近更新 更多