angular - 如何使用与angular2 http服务的保持连接

标签 angular rest http webservice-client angular2-http

我制作了一个 Angular 应用程序,它每两秒发出一次 http GET 请求以更新仪表板。但我经常收到 HTTP 错误 429(请求过多)。

我在 Firefox 开发者工具中看到请求是“Keep Alive”,时间为 5 秒,所以我认为每次调用都是打开与服务器的连接而不是重用它

如何告诉 Angular 重用连接?或者如何避免 429?只有 3 或 4 个并发客户端。

相关代码如下:

ngOnInit() {
    this.interval = Observable.interval(environment.dashboard_refresh_rate).subscribe(x => {
        this.getLockersFromService();
    });
    this.getLockersFromService();
}

ngOnDestroy() {
    this.interval.unsubscribe();
}

getLockersFromService() {
    this.http.get('/dashboard').subscribe(
        data => {
            this.showDashboard(data);
        },
        (err: HttpErrorResponse) => {
            this.showErrorResponse(err);
        }
    );
}

最佳答案

这是我使用的一个简单的过期实现。

什么是它有一个 session 并将 session 发送到后端(每 30 秒)。如果弹出一条成功消息,它将向 logoutTimer 添加 15 分钟。如果日期高于 logoutTimer,那么它将自动注销。

localStorage 用于,如果您在主页上再次打开它,您的 session 可以用 timeFithTeen 重新激活。

 constructor(private router: Router, private soap: SoapRequest) {  //soap is your rest 
        if (localStorage.getItem('logoutTimer') === null) {
            this.timeFithTeen();
        }   
    }



 ngOnInit() {
        Observable.timer(2000, 30000).subscribe(t => {
            let date = new Date();
            this.soap.keepAlive().then((response: any) => {
                localStorage.removeItem('logoutTimer');
                this.timeFithTeen();
            }), ((error: any) => {
                console.log(error);
            });
            if (date >= new Date(localStorage.getItem('logoutTimer'))) {
                localStorage.removeItem('sessionExpired');
                localStorage.setItem('sessionExpired', 'Session expired');
                this.router.navigateByUrl('/login');
            }
        });
    }
        private timeFithTeen() {
        let logoutTimer = new Date();
        logoutTimer.setMinutes(logoutTimer.getMinutes() + 15);
        localStorage.setItem('logoutTimer', logoutTimer.toString());
    }

关于angular - 如何使用与angular2 http服务的保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667972/

相关文章:

javascript - 如何在 Angular 2 中使用交互式美国 map 或如何在 Angular2 中导入和使用外部 javascript

java - Spring:使用 REST 服务发布新对象时出现类型定义错误

rest - SAML 和后端 REST 服务身份验证

http - 是否有任何浏览器支持 HTML 5's Canvas that don' t 默认为 gzip 的 'Accept-Encoding'?

css - 当引用 https 服务器上的 css 文件时,Angular 获取 CORS No Access-Control-Allow Origin

node.js - 如何修复此项目中的 "zone is not defined"

java - 未找到 Groovy HTTP ResponseParseException

http - 我们如何通过 GET 方法发送数据?

Angular 从另一个指令添加 fxFlex 指令

angularjs - 嵌套 REST 资源的 Angular ui-router 状态名称