我正在通过长时间的彗星支架民意测验来研究CppCMS框架。在许多情况下,客户端在给出来自服务器的任何响应之前,都会关闭这样的请求--例如,页面被关闭,用户移动到其他页面,或者只是重新填充。
在服务器端,我希望我会收到连接被删除的通知。我通过三个连接器测试了应用程序: FastCGI、SCGI和简单的HTTP。
从3台主要的UNIX服务器Apache2、lighttpd和Nginx,只有最后一个服务器的连接与预期一样关闭,允许我的应用程序从等待队列中删除请求--这对FastCGI和HTTP连接器都有效。(默认情况下,Nginx没有scgi模块)。
其他人,Apache和Lighttpd不关闭连接,也不通知后端断开连接的客户端,进程就好像客户机仍然在线一样。这发生在所有3个受支持的API上: FastCGI、SCGI和HTTP。
我已经为莱特普打开了一个问题,但更让我感到欣慰的是,Apache -成熟的、支持良好的web服务器就像lighttpd一样,并且没有公开客户端已经离开的服务器后端。
问题:
谢谢!
发布于 2009-09-06 00:53:45
(1)特征。或者,更确切地说,是实现细节的影响。
TCP/IP连接不涉及不断的来回通信流。因此,在没有(a)客户端告诉您正在关闭连接或(b)超时的情况下,无法知道客户端是否已离开。
(2)我对彗星或CppCMS并不特别熟悉。但是,是的,有各种各样的CMS服务器运行在上述web服务器之后,它们都必须处理这个问题(是的,这是一个痛苦)。
(3)超时是唯一的办法,但可以这么说,你可以减轻痛苦。当没有其他活动时,让客户端每N秒在连接上平一次服务器。不需要做任何事情,您可以在回复中添加内容;并发编辑的通知或任何您需要的内容。
您是正确的,因为mod_fastcgi不支持告诉后端Apache已检测到断开连接或连接超时,这是令人惊讶的。你也不是第一个感到沮丧的人。
此页上的第二个修补程序应修复该特定问题:
http://osdir.com/ml/web.fastcgi.devel/2006-02/msg00015.html
发布于 2009-09-06 00:06:35
彗星
我没有任何具体的信息给您,但本文确实提到,它们可以检测客户端何时断开了与Apache的连接。见tora.Queue。这听起来像是在neko CVS中找到了来源,所以你可以在那里找到一些线索。祝好运。
https://stackoverflow.com/questions/1354690
复制相似问题