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

时间:2017-12-18 16:30:18

标签: javascript client-server server-sent-events eventsource

我想在用户注销后以编程方式关闭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)中重新加载页面时,所有现有连接都将关闭,但我不想重新加载页面以解决此问题。

1 个答案:

答案 0 :(得分:0)

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

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

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