1

一旦用户注销,我想以编程方式关闭服务器发送事件。但是,当用户重新登录时,浏览器不再执行任何 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)中重新加载页面时,所有现有连接都会关闭,但我不想重新加载页面来解决此问题。

4

1 回答 1

0

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

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

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

于 2017-12-19T10:47:25.737 回答