Kay*_*Kay 6 php windows daemon
我需要一些实施建议.我有一个MYSQL数据库,它将被远程写入以便在本地处理任务,我需要用PHP编写的应用程序,以便在进入时执行这些任务.
但当然我的PHP应用程序需要被告知何时运行.我想过使用cron作业,但我的应用程序是在Windows机器上.其次,我需要每隔几秒钟不断检查一次,而cron只能每分钟检查一次.
我想过编写一个PHP守护进程,但我正在接受它的工作,如果它甚至是一个好主意!
我很感激有关最佳方法的任何建议.
pyCron是Windows的一个很好的CRON替代品:

由于此任务非常简单,我只需设置pyCron即可每分钟运行以下脚本:
set_time_limit(60); // one minute, same as CRON ;)
ignore_user_abort(false); // you might wanna set this to true
while (true)
{
$jobs = getPendingJobs();
if ((is_array($jobs) === true) && (count($jobs) > 0))
{
foreach ($jobs as $job)
{
if (executeJob($job) === true)
{
markCompleted($job);
}
}
}
sleep(1); // avoid eating unnecessary CPU cycles
}
Run Code Online (Sandbox Code Playgroud)
这样,如果计算机出现故障,您将遇到60秒的最坏情况延迟.
您可能还想查看信号量或某种锁定策略,例如使用APC变量或检查是否存在锁定文件以避免竞争条件,例如使用APC:
set_time_limit(60); // one minute, same as CRON ;)
ignore_user_abort(false); // you might wanna set this to true
if (apc_exists('lock') === false) // not locked
{
apc_add('lock', true, 60); // lock with a ttl of 60 secs, same as set_time_limit
while (true)
{
$jobs = getPendingJobs();
if ((is_array($jobs) === true) && (count($jobs) > 0))
{
foreach ($jobs as $job)
{
if (executeJob($job) === true)
{
markCompleted($job);
}
}
}
sleep(1); // avoid eating unnecessary CPU cycles
}
}
Run Code Online (Sandbox Code Playgroud)
如果你坚持使用PHP守护进程帮自己一个忙,放弃这个想法,请使用Gearman.
编辑:我曾经问过一个你可能会感兴趣的相关问题:PHP中的分布式系统剖析.
| 归档时间: |
|
| 查看次数: |
4407 次 |
| 最近记录: |