当服务器处于无限循环而客户端停止时会发生什么


What happens when the server is in an infinite loop and the client stops?

我正试图弄清楚服务器和客户端之间的"对话"是如何完成的。

因此,当服务器生成一个无限循环,例如echo"hello<br />"时,当客户端停止或点击"back"时会发生什么?

服务器如何知道这是循环的结束,还是需要一个无休止的过程?

有没有什么地方可以让我读到它只是为了了解全局?

客户端(浏览器)与服务器建立了TCP/IP会话,等待网站的HTTP响应。当用户点击/取消/关闭时,客户端会立即关闭此TCP连接。

Web服务器(即apache)将通知PHP解释器TCP连接关闭

除非php.ini指令ignore_user_abort设置为1(在服务器端,0是PHP默认值),否则当当前原子操作完成时,PHP解释器将中止脚本执行(在您的示例中:echo()

然而,即使您将ignore_user_abort明确设置为1,您也会遇到PHPmax_execution_time或apache TimeOut(两者都可以在服务器端配置)

另请参见ignore_user_abort()set_time_limit()

即使php脚本有一个无限循环,php.ini也有一个max_execution_time,如果时间超过,它将终止进程。

我不确定当客户端关闭连接时它将如何工作。Apache可能会终止进程,但我认为PHP不会收到客户端连接关闭的通知。

如果在脚本中执行set_time_limit(0);(因此PHP解释器允许它永远运行),那么无论TimeOut变量设置为多长时间(我认为默认为300秒,据我所知,这只是Apache设置),脚本都可能一直运行到web服务器将其杀死。

有关TimeOut指令,请参阅Apache的文档。