因为我最后选择了一种
比较不合常规的方法来做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启动脚本放一起。