【发布时间】:2014-10-26 13:29:58
【问题描述】:
我目前正在运行一个带有 beanstalk + supervisor + PHP 的队列系统。
我希望我的员工在有新版本可用时自动死亡(基本上是代码更新)。
我目前的代码如下
class Job1Controller extends Controller
{
public $currentVersion = 5;
public function actionIndex()
{
while (true) {
// check if a new version of the worker is available
$file = '/config/params.php';
$paramsContent = file_get_contents($file);
$params = eval('?>' . file_get_contents($file));
if ($params['Job1Version'] != $this->currentVersion) {
echo "not the same version, exit worker \n";
sleep(2);
exit();
} else {
echo "same version, continue processing \n";
}
}
}
}
当我更新代码时,params 文件将更改为新的版本号,这将迫使工作人员终止。我不能使用包含,因为文件将在 while 循环中加载到内存中。知道文件 params.php 在安全性方面并不重要,我想知道是否有其他方法?
编辑:params.php 如下所示:
<?php
return [
'Job1Version' => 5
];
【问题讨论】:
-
假设
params.php只是一堆变量,你可以使用ini、json或类似的序列化格式。 -
序列化你的配置(json 或序列化)比 include 快(很多),而且肯定比 read 和 eval 快。 JSON 甚至是可读和可编辑的。只是说。
-
使用 ini 文件只是为了保留工人的版本确实可能是一个解决方案,因为代码将在一天内执行大量时间,我猜使用 parse_ini 仍然比 eval 快.
标签: php gearman beanstalkd