【发布时间】:2010-10-25 12:17:57
【问题描述】:
情况:用户点击链接,服务器获取请求并开始处理。同时,用户点击另一个链接,服务器在处理第一个链接时获取新请求。发生什么了?在客户端,我们只看到来自第二个请求的网页,但是当接收到第二个请求时,来自第一个请求的进程是否在服务器上被杀死?它是由服务器管理还是由语言(Apache 或 PHP)管理?
【问题讨论】:
情况:用户点击链接,服务器获取请求并开始处理。同时,用户点击另一个链接,服务器在处理第一个链接时获取新请求。发生什么了?在客户端,我们只看到来自第二个请求的网页,但是当接收到第二个请求时,来自第一个请求的进程是否在服务器上被杀死?它是由服务器管理还是由语言(Apache 或 PHP)管理?
【问题讨论】:
视情况而定。如果浏览器没有断开与服务器的连接,它绝对不知道客户端已经导航到其他地方。如果它确实断开了连接,则由 Web 服务器来选择检测它并中止处理线程。
无论哪种情况,这都是 HTTP 无状态的本质。在这方面你不应该依赖任何东西。
【讨论】:
两个请求都得到处理(如果浏览器确实发送了第二个请求)。
您只会看到第二页,但如果您查看 access_log,您肯定会注意到两个请求。
这就是 HTTP 的工作原理。
【讨论】:
您可以使用ignore_user_abort() 告诉脚本在连接终止后继续(或不继续)。
【讨论】: