Angular - HTTP - 杀死保持活动连接

时间:2021-02-02 16:27:43

标签: angular

我在同时连接和浏览器限制方面遇到了一个大问题。

在我的页面中,我有一个按钮可以打开带有相机预览的对话框。 预览由 ZoneMinder 提供,ZoneMinder 是一款用于相机管理的 php 开源软件。

https://demo.zoneminder.com/
username: zmuser
password: zmpass

ZoneMinder 提供的 URL 必须用于 IMG 标签(src 属性)。它就像一个 jpg 流。

不幸的是,当我关闭对话框时,浏览器似乎仍然保持连接活动。所以我最多可以打开 6 个预览对话框,因为由于浏览器 http 同时连接限制,第 7 个没有显示。

ZM 的链接是这样的

http://zoneminder/cgi-bin/nph-zms?scale=100&width=640px&height=480px&mode=jpeg&maxfps=30&monitor=3&auth=44917393b19ba0da1331f87e33ea207e&connkey=837202&rand=1612281396

我尝试了从 angular 找到的所有解决方案:

  • 在 Dialog 中添加了一个 on destroy 方法来覆盖 img src:
@HostListener('unloaded')
ngOnDestroy()
{
   this.data.url = null;
}
  • 添加了 takeWhile 和取消订阅 http 调用(注意:killSubscription 作为对话框关闭回调调用)。
previewCamera(camera)
{
    this.isAlive = true;
    var connection = this.cameraService.buildStreamingLink(parameters);
    this.camera_preview_subscription = connection.pipe(timeout(5000)).pipe(takeWhile(() => this.isAlive)).pipe(map((response: any) => response)).subscribe(
      data => {

        var preview_img_src     = data["data"];

        var dialog_options                      = {};
        dialog_options["data"]["preview_url"]   = preview_img_src;
        
        this._interfaceService.openCustomDialog(CameraPreviewDialog , dialog_options , this.killSubscription.bind(this) );

      },
      err => {
        //some logging
      }
    );

}
killSubscription()
{
    this.isAlive = false;
    this.camera_preview_subscription.unsubscribe();
}

不幸的是,这些解决方案似乎都不起作用。

如何强制浏览器终止所有仍处于活动状态的连接?

谢谢。

0 个答案:

没有答案
相关问题