我想在用户注销后以编程方式关闭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)中重新加载页面时,所有现有连接都将关闭,但我不想重新加载页面以解决此问题。
答案 0 :(得分:0)
确保this.eventSource
指的是您的想法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this如果从事件处理程序调用它,它将不是全局范围。
调用xxx.close()
后,将xxx
设置为null。 (我怀疑这是问题,但它可能有助于垃圾收集,也有助于发现错误。)
作为问题的第三个想法,避免给全局变量提供与内置对象相同的名称。我通常使用es
作为我的事件源对象。