php静态类 多进程,【PHP】一种实现多进程的方式

本文介绍了一种在PHP中实现多进程推送的解决方案,通过Deamon和Act进程来提高消息PUSH的效率。在遇到Act进程被杀死导致锁文件残留的问题时,提出了在Deamon进程中自动清理旧锁文件的策略,以确保多进程的正常运行。
摘要由CSDN通过智能技术生成

多进程:

GO 语言可以很容易的实现多进程,对于 PHP,有没有比较简单的方法去实现?

这里有一种巧妙的方式,来实现多进程。

但是需要注意一下 内存 和 CPU 的使用情况

场景:消息PUSH。

假设 PUSH 有多种类型,比如针对用户的,针对游戏的,针对全局的。

我们使用 PHP 脚本去执行下发操作,长连接 PUSH 服务使用第三方系统提供的 API 来支持。

PHP 脚本是顺序执行的,假设配置了 N 条PUSH,后续的 PUSH 就要等前面的 PUSH 执行完毕,才能继续。

比如,第一条 PUSH 是处于 While(true) 之类的循环状态中,下发时间范围为一整天;那么其他的 PUSH 就只

能干等着,无法及时执行 PUSH 操作,从而耽误了业务。

方案:Deamon 进程 和 Act 进程

1、Deamon 进程:配置 crontab

* * * * * flock -xn /tmp/push_deamon.lock -c "/usr/local/php/bin/php push_deamon.php >> /tmp/push_error.log 2>&1"

2、Act 进程:在 push_deamon.php 中,针对不同 push_id,启动以下脚本。

$command = flock -xn /tmp/push_act_{$push_id}.lock -c "nohup /usr/local/php/bin/php -f push_act.php $push_id >> /tmp/push_error.log 2>&1 &"

exec($command);

问题:Act 进程被手动 Kill

有些 PUSH 是每天执行一次的,如果对应的 Act 进程被杀死。

那么对应的锁文件 push_act_{$push_id}.lock,就没有被清理。

这样会导致 Deamon 进程重启 Act 进程时,发现有锁文件,就不会继续启动 Act 进程。

解决办法:在 Deamon 进程中自动删除昨天的锁文件

$command = "find /tmp/ -daystart -mtime 1 -type f -name push_act_{$id}.lock -exec rm -f {} \; >> /tmp/push_error.log 2>&1 &";

exec($command);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值