我希望在用户注销后以编程方式关闭Server-Sent-Events。但是,当用户重新登录时,浏览器不再执行任何https-request,因为它已达到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)中重新加载页面时,所有现有的连接都会关闭,但我不想重新加载页面来解决这个问题。
发布于 2017-12-19 18:47:26
确保this.eventSource指的是您认为它是什么。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this如果从事件处理程序调用,它将不是全局作用域。
调用xxx.close()后,将xxx设置为null。(我怀疑这就是问题所在,但它可能有助于垃圾收集,也有助于查找but。)
作为问题的第三个想法,避免给全局变量以与内置对象相同的名称。我通常对我的事件源对象使用es。
https://stackoverflow.com/questions/47872590
复制相似问题