В моем приложении Laravel 5.2 при попытке показать пользователю индикатор прогресса во время долгого выполнения задачи я испытываю поведение приложения в очереди, которое вы могли видеть в однопоточном настольном приложении.
В основном:
- вошедший в систему пользователь A запускает долго выполняющуюся задачу t1
- тот же вошедший в систему пользователь A (или другой вошедший в систему пользователь B) запрашивает маршрут t2 который должен немедленно вернуть r2 (возвращает фиксированное значение независимо от t1). Обратите внимание, что если это имеет значение, пользователь B вошел в систему с вкладки частного просмотра.
с
public function t1(Request $request) {
for ($i = 0; $i < 10; $i++) {
sleep(1);
Log::info("r1 = " .$i );
}
$output = array('success' => 'Whatever'
);
return response()->json($output);
}```
и
public function t2() {
$r2 = rand(0, 100); // for testing purpose only
Log::info("r2 " . $r2);
return response()->json(array($progress));
}
В моем Laravel 5.2 приложение, я вижу, что r2 появляется только после завершения t1, как если бы мое приложение не смогло обработать несколько одновременных запросов к разным маршрутам.
Это не ожидаемое поведение. Что я должен изменить, чтобы t2 немедленно вернулся, даже если t1 все еще работает?
Любая помощь приветствуется: -)
Редактировать: Laravel сервер dev ОДНО РЕЗЬБОВЫЙ
На самом деле я тестировал это на своей машине разработчика с помощью Laravel artisan serve
, который является однопоточным , как описано здесь . Переход на prod сервер убрал все проблемы, упомянутые здесь. Итак, проблема решена ...