通过PHP和Apache2同时连接到单个浏览器

时间:2012-09-14 03:36:03

标签: php performance apache session

我现在有一个AJAX请求发送到sendMail.php,它立即关闭连接(使用标题 Connection:Close )并继续处理大约30秒。

但我现在遇到的问题是,当同一个客户端试图从该服务器加载任何PHP页面时,它必须等到sendMail.php完成处理。

有什么方法吗?

我正在阅读其他一些可能与会话相关的SO问题,但我没有使用任何会话,我甚至尝试在sendMail.php脚本的开头调用 session_write_close()

示例代码(这是hacky并且已经完成,但它确实有效):

   //File: SendMail.php
   //error_reporting(E_ALL);
    error_reporting(0);
    session_write_close();
    set_time_limit(0); 
    ignore_user_abort(1);
    ignore_user_abort(true);
    ini_set('ignore_user_abort','1');
    apache_setenv('no-gzip', 1);
    apache_setenv('KeepAlive',0);
    ini_set('zlib.output_compression', 0);
    ini_set('output_buffering', 0);

    $size = ob_get_length();

    // send headers to tell the browser to close the connection
    header("Content-Length: $size");
    header('Connection: Close');
        // flush all output
    ignore_user_abort(true);
    ob_end_flush();
    ob_flush();
    flush();
    sleep(30);//The real code has more stuff, but just for example lets just say it sleeps for 30 seconds

其余参考资料是通过GET进行的常规导航。

1 个答案:

答案 0 :(得分:0)

听起来好像你的AJAX调用正在调用一个脚本来咀嚼服务器上的可用资源(无论是内存/ CPU /磁盘I / O /等)还是阻止任何新脚本能够跑。仔细检查以确保您已分配足够的资源来完成工作。

另外,通常情况下,您不允许日常用户在服务器上生成运行时间过长的进程,因为您为他们提供了使系统过载并为他们提供简单机会的机会。 DDOS攻击。如果可能的话,我会考虑Ibere建议把它移到cron上。