HTTP代理/FastCGI/SCGI在客户端断开连接时未关闭连接-错误或功能?

HTTP代理/FastCGI/SCGI在客户端断开连接时未关闭连接-错误或功能?,http,comet,fastcgi,http-proxy,scgi,Http,Comet,Fastcgi,Http Proxy,Scgi,我正在通过长时间的XMLHttpRequest民意测验为框架工作。在许多情况下,这样的请求在服务器给出任何响应之前由客户端关闭——例如,页面关闭、用户移动到另一个页面或只是重新刷新 在服务器端,我希望收到连接断开的通知。我通过3个连接器测试了应用程序:FastCGI、SCGI和简单HTTP代理 从3个主要的UNIX web服务器Apache2、lighttpd和Nginx,只有最后一个服务器关闭了 连接符合预期,允许我的应用程序从等待队列中删除请求——这对FastCGI和HTTP代理连接器都有效

我正在通过长时间的XMLHttpRequest民意测验为框架工作。在许多情况下,这样的请求在服务器给出任何响应之前由客户端关闭——例如,页面关闭、用户移动到另一个页面或只是重新刷新

在服务器端,我希望收到连接断开的通知。我通过3个连接器测试了应用程序:FastCGI、SCGI和简单HTTP代理

从3个主要的UNIX web服务器Apache2、lighttpd和Nginx,只有最后一个服务器关闭了 连接符合预期,允许我的应用程序从等待队列中删除请求——这对FastCGI和HTTP代理连接器都有效。(默认情况下,Nginx没有scgi模块)

另外,Apache和Lighttpd不会关闭连接或通知后端已断开连接 客户端,则继续操作,就像客户端仍然在线一样。这适用于所有3个受支持的API:FastCGI、SCGI和HTTP代理

我为他开了一个问题,但是什么 更让我担忧的是,Apache——一个成熟且支持良好的web服务器,如lighttpd 并且不公开客户端已经消失的服务器后端

问题:

  • 这是一个bug还是一个特性?是否有任何理由不关闭web服务器和应用程序后端之间的连接
  • 是否有真实的Comet应用程序通过FastCGI/SCGI/HTTP代理后端在这些服务器后面工作
  • 如果上述情况属实,他们如何处理这个问题?我知道我可以每10秒超时一次所有连接,但我想让它们在客户端监听时保持空闲--因为这样可以更容易地扩展--每个连接都非常便宜--成本只是开放的套接字
  • 谢谢

    我没有任何具体的信息可供您参考,但本文确实提到,它们可以检测客户端何时与Apache断开连接。请参见
    tora.Queue
    。听起来neko的简历中有这个来源,所以你可以在那里找到一些线索。祝你好运

    (1)功能。或者,更具体地说,是实现细节的影响

    TCP/IP连接不涉及来回的恒定流量。因此,如果没有(a)客户机告诉您它正在关闭连接或(b)超时,就无法知道客户机已离开

    (2) 我并不特别熟悉Comet或CppCMS。但是,是的,有各种各样的CMS服务器在上述web服务器后面运行,它们都必须处理这个问题(是的,这是一个痛苦)

    (3) 暂停是唯一的办法,但可以说,你可以减轻痛苦。当没有其他活动时,让客户端每隔N秒通过连接ping一次服务器。不需要做任何事情,你可以在回复上钉东西;并发编辑通知或任何您需要的通知

    您是正确的,mod_fastcgi不支持告诉后端Apache检测到断开连接或连接超时,这是令人惊讶的。你不是第一个感到沮丧的人

    此页面上的第二个修补程序应修复该特定问题:


    我知道,除非客户端关闭连接,否则您无法知道是否发生了迪斯科。通常,web浏览器都会这样做。谢谢你的补丁链接。。。接受答案如果有cppcms标签就好了,但是最多只能有5个标签。。。我把它留给你来决定哪一个现有的5个标签可以放弃赞成新的“cppcms”标签。如果有那么多直接影响cppcms的问题能够被适当地标记,那就太好了+1.