我在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应用程序中添加一些内容作为拦截器,这将是完美的。
在我们的应用程序中,我们可以向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()
);