jQuery Ajax超时使http请求保持打开状态,导致长轮询应用程序内存泄漏

jQuery Ajax超时使http请求保持打开状态,导致长轮询应用程序内存泄漏,jquery,ajax,sockets,http,cppcms,Jquery,Ajax,Sockets,Http,Cppcms,tl;dr:jQuery的ajax函数似乎无法关闭超时的http请求。因此,每次长轮询请求打开的每个套接字永远不会关闭,服务器最终会因为打开的套接字数量而拒绝连接是否可以在这些连接超时后关闭它们,这样我就可以开始下一次长时间的投票,而不用担心无休止地打开(以及随后孤立)连接?如果不是,我的长轮询方法哪里出了问题? 注意:我意识到这可能是意料之中的行为,但我做了一个噩梦:跟踪所有的运动部件,孤立我对这个问题的误解。非常感谢您提供的任何指导/澄清 我开发了一个简单的应用程序来演示基于LoTTPD、C

tl;dr:jQuery的ajax函数似乎无法关闭超时的http请求。因此,每次长轮询请求打开的每个套接字永远不会关闭,服务器最终会因为打开的套接字数量而拒绝连接是否可以在这些连接超时后关闭它们,这样我就可以开始下一次长时间的投票,而不用担心无休止地打开(以及随后孤立)连接?如果不是,我的长轮询方法哪里出了问题?

注意:我意识到这可能是意料之中的行为,但我做了一个噩梦:跟踪所有的运动部件,孤立我对这个问题的误解。非常感谢您提供的任何指导/澄清

我开发了一个简单的应用程序来演示基于LoTTPD、CPPCMS(A+C++ Web框架)和JQuery的基于推送的通知。客户端执行以下操作:

function listen(){
  $.ajax({
    url: "/push_test",
    type: "POST",
    timeout: 3000, // 3 seconds
    data: {
      will_leak: true
    },
    success: function(r){
      console.log("server responded: " r);
    },
    error: function(xhr, st, e){
      console.log("push_test error");
      console.dir(xhr);
      console.log("status: " + st);
      console.log("error: " + e);
    },
    complete: function(){
      //listen();
    }
  });
}
然后服务器执行类似的操作(我在python Flask微框架中进行了类似的测试,结果与以下cppcms实现相同):

void push_测试()
{
if(request().post(“will_leak”)){
std::this_thread::sleep_for(std::chrono::seconds(5));//注意客户端超时为3秒。
}
响应()。设置纯文本标题();
response().out()
void push_test()
{
    if(request().post("will_leak")){
        std::this_thread::sleep_for(std::chrono::seconds(5)); // Note client timeout of 3 seconds.
    }
    response().set_plain_text_header();
    response().out() << "If you see this on the client, we're all gucci";
    // Hint: if will_leak was true, you never see the above message.
}