Linux-PHP做daemon是否可行
先上代码
// 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);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
1、脚本异常结束了,你可以写个在这里面加段代码把异常信息发到你的邮箱或者如果有短信网关的话还可以短信报警等。
2、重启代码就写个shell把这个进行结束了,然后重新执行就行。
当然可以
你要判断程序是否异常结束需求其他程序来监控它。
重启的话只能KILL掉再执行启动命令。
另:程序写成daemon,用pcntl_fork来实现应该更适合
有个开源的纯PHP写的web服务器 Nanoweb 完全可以证明这一点,这个服务器性能蛮高的
自己看 改成这样会比较好点
<?php
// daemon.php
while(1) {
try{
$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') {
// 要往外发短信
} elseif ($command = 'exit'){
// 通过接口发送停止 命令来停止
exit();
}
}
// 不管有没有取到 停200毫秒 防止 不停的请求 接口
usleep(200);
}
catch (Exception $e){
print $e->getMessage();
}
}
?>
你写的这个也没大多问题,我说下我的看法:
首先我不建议自己用 file_get_contents 来写,如何队列服务挂掉的话,那么 file_get_contents 会使服务器的负载很高,可参考 @file_get_contents 函数会使服务器的负载很高,有什么好的办法解决?
推荐使用 HTTPSQS 的 php客户端 :php-httpsqs-client
如果某一条任务执行时间很长,那么会照成其他任务的等待,所以也推荐使用fork来处理任务。