php comet:吃掉CPU资源

时间:2012-12-22 16:35:29

标签: php comet

我建立了一个网站,其中我使用了彗星与PHP。只要我做了一些研究并找到了教程它似乎很容易实现,对服务器没有特殊要求,除了它将使用大量资源。现在,我收到来自托管的通知,我的脚本正在吃掉90%的cpu资源:(我把脚本关闭了,但我的问题是现在应该最好使用什么?我读了关于node.js但是也看了他们会需要一些关于服务器的要求吗?在这种情况下有任何好的和易于实现的解决方案吗?

如果假设我在这个彗星脚本中每天有2000个用户,那么VPS或专用服务器是否可以?

编辑:

/*CLOSE THE SESSION WITH USER DATA*/
session_write_close();

// set time expire unlimited
set_time_limit(0);  

$OldPostID      = isset($_REQUEST['OldPostID']) ? intval($_REQUEST['OldPostID']) : 0;

$result_set_query_1 = $MClass->MyPostings($PageOwner); 

if (mysql_num_rows($result_set_query_1))
{
    $o = 0;
    while ($r = @mysql_fetch_array($result_set_query_1))
    {
        $PID = $r['PID'];
    }
}

$NewPostID = $PID;

while ($NewPostID <= $OldPostID)    
{
    usleep(10000); // sleep 10ms to unload the CPU
    clearstatcache();

    $result_set_query_2 = $MClass->MyPostings($PageOwner);

    if (mysql_num_rows($result_set_query_2))
    {
        $o = 0;
        while ($rs = @mysql_fetch_array($result_set_query_2))
        {
            $PID = $rs['PID'];
        }
    }

    $NewPostID = $PID;
}

// return a json array
$result_set_posts   = $MClass->GetAllMyPostings( $PageOwner, $OldPostID, 0); 

}

3 个答案:

答案 0 :(得分:1)

2000用户/天是一个小数字,除非典型的会话是1小时左右。标准PHP部署不能在服务器推送方案中使用,因为每个请求都使用不同的进程处理。

如果您不想购买专用服务器,可以尝试回退重复轮询(如果,假设可以接受30秒延迟)。但是,如果这确实有助于CPU的使用取决于您的实际导航模式,那么这只是一次尝试。

否则,如果您能负担得起专用硬件,请使用您更熟悉的语言。既然你命名了Node.js,我想你可以用Javascript编写代码,那么学习Node可能不是一件很困难的事。 Python(Twisted),Java,Scala以及您熟练掌握的任何内容都有其他选择。只需选择语言,然后相应地选择框架。

答案 1 :(得分:1)

Comet本身并没有使用大量资源,除非指示它是脚本。如果您在javascript中为Node.js服务器重写看似CPU密集型的脚本,它很可能会以相同的方式执行。

将“推送”系统放在一起通常需要设置一个云实例 - 例如,从Heroku免费设置 - 或者设置一个可以访问shell的专用/ VPS服务器。

而Node.Js是一种较新的,虽然相对不成熟的“推”技术的实现。为了使节点运行,您需要安装node.Js服务器。很少有主机可以安装 - 但可以通过一些简单的shell命令轻松安装。

但从上述情况来看,很少有用户可以同时使用您的应用,因为它已经只为一个用户以90%的CPU运行。如果用户在每个会话中使用该应用程序的时间很短,那么肯定,每天有2000个用户是可行的,这取决于有多少用户同时和何时使用它。也许

答案 2 :(得分:0)

通过在循环中运行服务器逻辑,PHP服务器脚本通常会保持活跃状态​​。 当我在运行24/7 bcakground脚本时出现了一个类似的问题,当我将time_nanosleep(0, 10000000);添加到循环结束时,CPU使用率从90%降到1%以下。这不是万无一失的方式,但它对我有用。