我正在使用一些 cometd 技术,包括长轮询和永久帧。我将 iframe 用于跨子域的内容。我在实现这些技术时遇到的一个问题是,当用户刷新页面或导航到另一个页面导致新请求时,comet 连接从旧页面保持打开状态。我的服务器( Tornado )从来没有收到关闭的连接,并且从我有限的 wireshark 能力来看,我没有看到任何发送的 TCP fin 数据包。但是,当我关闭浏览器时,此时套接字已关闭。
这些被放弃的开放连接无缘无故地用尽了服务器端的内存。当服务器向打开的套接字发送一些消息并且 IE 然后正确显示错误消息时,它也会导致问题:“无法从已释放的脚本执行代码”。所以 IE 试图在导航离开的旧窗口上执行代码。其他人如何处理这个问题?我应该使用 onbeforeunload 以某种方式关闭连接吗?
最佳答案
您可以不时地从客户端重新启动一个打开的连接,如果请求没有在指定的时间范围内到达服务器,您可以安全地关闭旧连接。
关于javascript - 废弃开放连接的 Comet 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719609/