最近我一直在研究 Beanstalkd 与 PHP 的使用。我学到了很多,但对服务器上的设置等有一些疑问。
这是我看到它的工作方式:
- 我在我的 Ubuntu 服务器上安装了 Beanstalkd 和任何依赖项(例如 libevent)。然后我启动 Beanstalkd 守护程序(基本上应该一直运行)。
- 在我网站的某处(例如当用户执行某些操作时等)任务被添加到 Beanstalkd 队列中的各种管中。
我有一个 bash 脚本(例如下面的脚本),它作为一个基本上执行 PHP 脚本的守护进程运行。
#!/bin/sh php worker.php
4) 工作脚本将有这样的东西来执行排队的任务:
while(1) {
$job = $this->pheanstalk->watch('test')->ignore('default')->reserve();
$job_encoded = json_decode($job->getData(), false);
$done_jobs[] = $job_encoded;
$this->log('job:'.print_r($job_encoded, 1));
$this->pheanstalk->delete($job);
}
现在这是我基于上述设置的问题(如果我错了,请纠正我):
假设我有将 RSS 提要导入数据库或其他东西的任务。如果 10 个用户同时这样做,他们都会在“测试”管中排队。然而,他们一次只能被处决一个。让 10 个不同的管子同时执行会更好吗?
如果我确实需要更多管子,那是否也意味着我需要 10 个工作脚本?除了 watch() 函数中的字符串文字外,每个管子都使用基本相同的代码同时运行。
如果我将该脚本作为守护进程运行,它是如何工作的?它会不断执行worker.php 脚本吗?该脚本循环直到理论上队列为空,所以它不应该只启动一次吗?守护进程如何决定多久执行一次worker.php?这只是一个设定吗?
谢谢!