У меня есть приложение с длительным временем работы сервера, которое хранит процесс следующим образом:
routes.php
Route::post('cloud/slice/{modelfileid}', '[email protected]');
Route::get('cloud/slice/sliceProgress', '[email protected]');
часть функции slice():
while($s = fgets($pipes[2]))
{
if(strpos($s, "Progress:") !== FALSE)
{
Log::info(100 * substr($s, -10, 4) . '%');
$this->redis->SET('sliceProgress' . $uid, 100 * substr($s, -10, 4) . '%');
}
}
а мой клиент каждые 0,5 секунды запрашивает прогресс в redis с этим:
public function sliceProgress()
{
if (!isset($_SESSION["uid"]))
return Redirect::to('cloud');
$uid = $_SESSION["uid"];
return Response::json(array('status' => 'success', 'data' => array('progress' => $this->redis->GET('sliceProgress' . $uid))));
}
и
$interval(function()
{
$scope.refreshProgress();
}, 500);
Но клиент получит запрос о проделанной работе до конца со 100%, без прогресса, который составляет менее 100%. То есть, я получаю ответ на ход, когда приложение среза сервера завершено. Я полагаю, что laravel не обрабатывает второй запрос при обработке среза.
Отредактировано: Я использую ниже код, чтобы получить redis в slice() после того, как redis- > SET работает хорошо, это выводит sliceProgress в реальном времени.
Log::info($this->redis->GET('sliceProgress' . $uid));