Недавно я исследовал использование Beanstalkd с PHP.Я многому научился, но у меня есть несколько вопросов о настройке на сервере и т. Д.
Вот как я это вижу:
- Я устанавливаю Beanstalkd и любые зависимости(например, libevent) на моем сервере Ubuntu.Затем я запускаю демон 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?Это просто настройка?
Спасибо!