Недавно я изучал использование Beanstalkd с PHP. Я узнал довольно много, но у меня есть несколько вопросов о настройке на сервере и т.д.
Вот как я вижу, что он работает:
- Я устанавливаю Beanstalkd и любые зависимости (например, libevent) на моем сервере Ubuntu. Затем я запускаю демон Beanstalkd (который должен в основном работать в любое время).
- Где-то на моем веб-сайте (например, когда пользователь выполняет некоторые действия и т.д.) задачи добавляются в различные трубки в очереди Beanstalkd.
-
У меня есть bash script (например, следующий), который запускается как деамон, который в основном выполняет PHP скрипт.
#!/bin/sh php worker.php
4) Рабочий script имел бы что-то подобное для выполнения задач, стоящих в очереди:
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().
-
Если я запустил этот script в качестве демона, как это работает? Будет ли он постоянно выполняться work.PHP скрипт? Этот script цикл до тех пор, пока очередь не будет пуста теоретически, так что не следует ли ее запускать только один раз? Как демон решает, как часто выполнять work.php? Это просто настройка?
Спасибо!