Linux-PHP做daemon是否可行

需求定制 需求定制 主题:1050 回复:2283

Linux-PHP做daemon是否可行

夜无邪 发布于 2016-12-30 字数 553 浏览 970 回复 5

先上代码

// daemon.php
while(1) {
$data = @file_get_contents('http://127.0.0.1:1218/?name=sms_queue&opt=get');
if ($data != 'HTTPSQS_GET_END' && $data != 'HTTPSQS_ERROR') {
$command = substr($data,0,4);
if ($command == 'rece') {
// 接收到上行短信
} elseif ($command = 'send') {
// 要往外发短信
} else {
Continue;
}
} else {
sleep(1);
}
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(5

晚风撩人 2017-10-12 5 楼

1、脚本异常结束了,你可以写个在这里面加段代码把异常信息发到你的邮箱或者如果有短信网关的话还可以短信报警等。

2、重启代码就写个shell把这个进行结束了,然后重新执行就行。

甜柠檬 2017-07-31 4 楼

当然可以
你要判断程序是否异常结束需求其他程序来监控它。
重启的话只能KILL掉再执行启动命令。

另:程序写成daemon,用pcntl_fork来实现应该更适合

偏爱自由 2017-06-28 3 楼

有个开源的纯PHP写的web服务器 Nanoweb 完全可以证明这一点,这个服务器性能蛮高的

甜柠檬 2017-04-20 2 楼

 自己看 改成这样会比较好点

<?php
// daemon.php
while(1) {
try{
$data = @file_get_contents('http://127.0.0.1:1218/?name=sms_queue&amp;opt=get');
if ($data != 'HTTPSQS_GET_END' && $data != 'HTTPSQS_ERROR') {
$command = substr($data,0,4);
if ($command == 'rece') {
// 接收到上行短信
} elseif ($command = 'send') {
// 要往外发短信
} elseif ($command = 'exit'){
// 通过接口发送停止 命令来停止
exit();
}

    } 
    // 不管有没有取到 停200毫秒 防止 不停的请求 接口
    usleep(200);
}
catch (Exception $e){
    print $e-&gt;getMessage();
}

}

?>

灵芸 2017-03-11 1 楼

你写的这个也没大多问题,我说下我的看法:

首先我不建议自己用 file_get_contents 来写,如何队列服务挂掉的话,那么 file_get_contents 会使服务器的负载很高,可参考 @file_get_contents 函数会使服务器的负载很高,有什么好的办法解决?

推荐使用 HTTPSQS 的 php客户端 :php-httpsqs-client

如果某一条任务执行时间很长,那么会照成其他任务的等待,所以也推荐使用fork来处理任务。