У меня есть «прокси-сервер» (A), на котором запущен Apache/PHP с запросом другого сервера (B), использующего Apache/PHP, используя file_get_contents
. Когда пользователь запрашивает сервер A, он запрашивает сервер B. Запрос на сервере B требуется до двух минут для завершения, поэтому он очень рано реагирует на ожидающую анимацию, за которой следует PHP flush()
, sth. как это:Ответ PHP-сервера на сервер «proxy»
User ---> Server A (a.php) ---> Server B (b.php)
- file_get_contents to B - flush after 1s
- nothing happens after 1s - response end after 2m
waits 2m <---
Проблема у меня есть сейчас, что это рано вровень с B не «зеркально» А. Таким образом, пользователь должен ждать полного времени, прежде чем увидеть окончательный ответ. Когда я вызываю сервер B напрямую, он показывает анимацию ожидания через 1 секунду.
Минимальный пример кода для "A.php":
<?php
$stream_context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded'
)
));
echo file_get_contents('http://1.2.3.4/b.php', false, $stream_context);
?>
минимальный пример кода для "b.php":
<?php
echo 'Loading...';
flush();
// Long operation
sleep(60);
echo 'Result';
?>
Q: Есть способ заставить сервер A «зеркально отобразить» ранний flush
с сервера B, отправив точно сброшенный результат с сервера B?
Как именно я должен сделать это в A.php? – migg
Я обновляю свой ответ –
@migg, помогает вам? –