Joe*_* H. 4 httpd cgi apache-2.2
我有一个相当资源密集型的 CGI,需要很长时间才能开始发送数据。我们已经看到很多不耐烦的人重新加载几次的情况,然后触发要加载的 CGI 的额外运行,或者客户端超时并断开连接但 CGI 继续运行的情况。
有什么好的方法可以检测何时发生这种情况?它甚至不需要在 CGI 本身中(如果不是,可能会更好——它交给我无法控制的另一个程序),但可能是一个经常运行的 cron 作业寻找死的连接来收获。
我目前正在使用 Apache,但这是一个问题,如果它有处理它的规定(或让我监视问题的方法),我愿意运行其他一些网络服务器。
通常,在您开始写回给用户之前,您无法检测到断开的连接。否则,您的进程将继续执行其工作,而不会注意到用户端的连接中止。即使它谈论 PHP,这篇文章也是相关的。概念应该是一样的。
您可以尝试以下方法:
如果将当前运行的作业保存在数据库中,则可以保存请求 ID 和/或客户端 IP 地址。因此,您可以检测并忽略对同一资源的重复请求,告诉用户“您的请求正在处理中”。