我正试图弄清楚服务器和客户端之间的"对话"是如何完成的。
因此,当服务器生成一个无限循环,例如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的文档。