Я создал artisan command
, который я хочу запустить сразу после вызванного метода. Но команда содержит команду sleep();
. Я хочу запустить команду artisan в фоновом режиме, потому что метод должен return
сразу же ответить пользователю. Мой пример кода является ниже:Как спать PHP (Laravel 5.2) в фоновом режиме
В файле маршрута
Route::get('test', function(){
Artisan::queue('close:bidding', ['applicationId' => 1]);
return 'called close:bidding';
});
В close:bidding
команда
public function handle()
{
$appId = $this->argument('applicationId');
//following code line is making the problem
sleep(1000 * 10);
//close bidding after certain close time
try{
Application::where('id', $appId)->update(['live_bidding_status' => 'closed']);
}catch (\PDOException $e){
$this->info($e->getMessage());//test purpose
}
$this->info($appId.": bid closed after 10 seconds of creation");
}
Проблема Когда я ударил /test
URL возвращенная строка called close:bidding
это время после 10 секунд загрузки браузера, becaus e внутри команды находится sleep(10 * 1000)
.
Что я хочу Я хочу запустить команду в фоновом режиме. Я имею в виду, когда я нажимаю url /test
, он должен немедленно отобразить called close:bidding
, но команда close:bidding
будет работать в фоновом режиме. Через 10 секунд он обновит приложение, хотя внешний пользователь ничего не заметит.
Частичные Вопросы
ли это как-то связано с
multi threading
?Это что-то, что нельзя решить с помощью PHP, следует ли думать иначе?
Есть ли способ решить эту проблему даже при использовании очереди Laravel?
Может быть, вы можете попробовать laravel queue jobs вместо команды – vijaykumar
Спасибо, я попробую – Imran