用PHP写后台进程

因为我最后选择了一种

比较不合常规的方法来做Jabber的web client。

其实也不算client,只是接收访客输入,保存到数据库里面,然后用一个Jabber的php client收集这些,转发给其他的客服账号。同时在Jabber上扩展了一点协议,处理客服账号到php client的分发。

这个php的jabber

client是不退出的,由于在web上执行可调试性不好,所以转为php xxxx.php的后台运行。

然而总是在一定时间后挂掉。看了一下原因,是memory exhausted了,16M都用光了,肯定有些地方内存泄漏而无法回收。

于是看代码,我写的都是简单的赋值语句,理论上是可以正常回收的。看看借过来的jabber.php,有地方用了unset,作者应该还算正常。再看看数据库操作,是从wordpress那边借用的代码,改改然后用的。

有这么两行:

if (SAVEQUERIES)

$this-

timer_start();

if (SAVEQUERIES)

$this-

queries[] = array( $query, $this-

timer_stop() );

SAVEQUERIES我是没有定义过的,看上去它被当作true,因为这两句都执行了。

问题应该出在下面那句,是一个不断往数组里面添加新元素的句子。事实上纪录数据库操作顺序和时间对我来说毫无意义,于是把它们都注掉了。再跑跑,一个晚上内存都没增加。

把代码放到公网服务器上的时候,发现ssh的界面一关,php xxxx.php也关掉了,后面加

也没有用。

好好查查,发现比内网代码少了一句:

set_time_limit(0);

难怪,由此可见,关闭终端的效果是跟关闭浏览器的效果是一样的,php程序立刻退出。

这个程序足够稳定之后,拟将它和jabber启动脚本放一起。