PHP и Apache — flush & amp; поведение ob_flush

Я тестирую некоторые виды поведения ob_flush в моем ноутбуке с Ubuntu, используя Apache2, PHP5 и браузер Firefox.

Следующий код печатает числа от 0 до 9 со второй паузой.

Каждый раз, когда он отображает число — он должен сбросить его обратно в браузер.

ini_set('output_buffering', 'off');
// Turn off PHP output compression
ini_set('zlib.output_compression', false);

header('Content-type: text/html; charset=utf-8');

echo memory_get_usage() / 1024 / 1024 . "<br>";

echo "The time is " . date("h:i:sa") . "<br>";
echo memory_get_usage() / 1024 / 1024 . "<br>";
for ($i = 0; $i < 10; $i++) {
echo $i . " - " . memory_get_usage() / 1024 / 1024 . '<br />';
flush();
ob_flush();
sleep(1);
}
sleep(1);
echo 'End ...<br />';
echo "The time is " . date("h:i:sa");

Я запустил код одновременно в 2 разных окнах Firefox, и это был вывод:

Первое окно браузера:

0.26750183105469
The time is 04:17:09pm
0.26776123046875
0 - 0.26792144775391
1 - 0.26787567138672
2 - 0.26787567138672
3 - 0.26787567138672
4 - 0.26787567138672
5 - 0.26787567138672
6 - 0.26787567138672
7 - 0.26787567138672
8 - 0.26787567138672
9 - 0.26787567138672
End ...
The time is 04:17:20pm

Второе окно браузера:

0.26509094238281
The time is 04:17:11pm
0.26535034179688
0 - 0.26551055908203
1 - 0.26546478271484
2 - 0.26546478271484
3 - 0.26546478271484
4 - 0.26546478271484
5 - 0.26546478271484
6 - 0.26546478271484
7 - 0.26546478271484
8 - 0.26546478271484
9 - 0.26546478271484
End ...
The time is 04:17:22pm

Вы могли ясно видеть, что два запроса обрабатывались Apache одновременно и что использование памяти составляло 0,26 МБ.

Все хорошо, все счастливы 🙂

Я скопировал и вставил этот код в метод класса, и внезапно Apache перестал обрабатывать запросы одновременно, а один за другим.

Это новый код:

ini_set('output_buffering', 'off');
// Turn off PHP output compression
ini_set('zlib.output_compression', false);

header('Content-type: text/html; charset=utf-8');

echo memory_get_usage() / 1024 / 1024 . "<br>";
$task = new TestTask(null);
$task->start();

Опять же — я отправил запрос одновременно в 2 разных окнах Firefox:

Первое окно браузера:

0.26746368408203
The time is 04:20:34pm
2.3088989257812
0 - 2.3089752197266
1 - 2.3089294433594
2 - 2.3089294433594
3 - 2.3089294433594
4 - 2.3089294433594
5 - 2.3089294433594
6 - 2.3089294433594
7 - 2.3089294433594
8 - 2.3089294433594
9 - 2.3089294433594
End ...
The time is 04:20:45pm

Второе окно браузера:

0.26506042480469
The time is 04:20:45pm
2.3051910400391
0 - 2.3052673339844
1 - 2.3052215576172
2 - 2.3052215576172
3 - 2.3052215576172
4 - 2.3052215576172
5 - 2.3052215576172
6 - 2.3052215576172
7 - 2.3052215576172
8 - 2.3052215576172
9 - 2.3052215576172
End ...
The time is 04:20:56pm

Здесь вы можете видеть, что он был обработан Apache один за другим (с учетом времени), а также — поскольку я инкапсулировал код внутри класса — использование памяти возросло до 2,3 МБ.

Я предположил, что это связано с лимитом памяти PHP (установленным 128 МБ) или объемом памяти, который может быть выделен параллельными запросами Apache, или, может быть, что-то в ОС (Ubuntu)? ограничение объема памяти PHP рамки могут выделить?

Я установил для MaxClients of Apache смехотворно высокое число, чтобы убедиться, что он не имеет к этому никакого отношения.

Любые идеи, где или что я должен искать и переустанавливать?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector