尽管调用了'close()`,服务器发送的事件连接仍未关闭

问题描述 投票:1回答:1

我想在用户注销后以编程方式关闭Server-Sent-Events。但是,当用户重新登录时,浏览器不再执行任何https请求,因为它已达到SSE连接的限制。

我正在使用EventSource来收听活动。 这就是我关闭连接的方式:

var eventSource;
function onChange(accountId:string, callback){
    var url = "...";

    eventSource = new EventSource(url);

    if(eventSource){
        eventSource.addEventListener("put", callback);
    }
}

function close(){
    this.eventSource.close()
}

当我在浏览器上观察网络连接时,我意识到连接仍然存在。 Timing中的输出为:Caution: request is not finished yet!,由于连接数量有限,以下事件流停滞。

我不确定EventSource是否设计得像这样,但我找不到任何关于这个问题,因为很多人没有相同的情况。 每次我在浏览器(chrome)中重新加载页面时,所有现有连接都将关闭,但我不想重新加载页面以解决此问题。

javascript client-server server-sent-events eventsource
1个回答
0
投票

确保this.eventSource指的是你的想法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this如果从事件处理程序调用它将不是全局范围。

在调用xxx.close()之后,将xxx设置为null。 (我怀疑这是问题,但它可能有助于垃圾收集,也有助于发现错误。)

作为问题的第三个想法,避免给全局变量提供与内置对象相同的名称。我通常使用es作为我的事件源对象。

© www.soinside.com 2019 - 2024. All rights reserved.