deflate
24.07.2014 - 02:55
Доброй ночи. Скрипт ниже нормально работает на локалке и не работает на хосте, проверял на трёх разных хостингах.
$i = 0;
$c = $i + 4;
while (++$i < $c) {
echo $i . "\n\n";
ob_flush();
flush();
sleep(2);
}
На локалке он как положено выводит в браузер по одной цифре раз в две секунды. Но это только на локале. То есть буфер не сбрасывается. Есть подозрение, что проблема кроется в gzip/deflate, судя по заголовкам и по слухам gzip сам буферизирует вывод. Попытка отключить через php и htaccess (SetEnv no-gzip dont-vary) не работает. Кто-нибудь сталкивался с такой штукой?
deflate
24.07.2014 - 13:33
UP
Проверь, может между тобой и апфчем на хостине стоит какой-нибуть nginx или что-то подобное. В таком случае апач сначала отдаст контент nginx, который отошлет его тебе, весь и сразу.
deflate
24.07.2014 - 14:15
Цитата |
Проверь, может между тобой и апфчем на хостине стоит какой-нибуть nginx или что-то подобное. В таком случае апач сначала отдаст контент nginx, который отошлет его тебе, весь и сразу.
|
Тестировал в частности на хосте 1gb - у них ngnix не упоминается
Не нужно искать какие-то упоминания о наличии у хостера front end-а для основного http-сервера. Это их внутрення кухня и они врятли об этом будут упоминать.
Просто посмотри заголовки ответа, па предмет отдающего ПО(заголовок Server).
Вот пример ответа от сайта, который за fron end nginx "прячется":
http://clip2net.com/s/iAzetL
deflate
24.07.2014 - 15:09
нет не ngnix
HTTP/1.1 200 OK
Date: Thu, 24 Jul 2014 11:07:03 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.26-1~dotdeb.0
Set-Cookie: PHPSESSID=glp689h9vqlajebta8oeuodqc6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Type: text/html
sergeiss
24.07.2014 - 15:34
В хэлпе
http://ru2.php.net/manual/ru/function.flush.php, по-моему, четко всё описано: может быть выведет сразу же, а может и не выведет. Эта функция является, по сути, пожеланием программиста: "отдай всё клиенту, что есть в выходном буфере". Пожеланием, но не командой, требующей немедленного исполнения.
Изначально какая задача у тебя? Просто проверить, как работают буферы вывода или еще что-то?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
deflate
24.07.2014 - 18:38
Цитата |
В хэлпе http://ru2.php.net/manual/ru/function.flush.php, по-моему, четко всё описано: может быть выведет сразу же, а может и не выведет. Эта функция является, по сути, пожеланием программиста: "отдай всё клиенту, что есть в выходном буфере". Пожеланием, но не командой, требующей немедленного исполнения.
Изначально какая задача у тебя? Просто проверить, как работают буферы вывода или еще что-то?
|
задача простая. js открывает постоянное соединение, php асинхронно отдаёт данные в поток. Но так как буфер не сбрасывается, отдаёт пачками. Оно может было бы и без разницы, но визуализация прогресса на клиенте убогая получается. А в моём случае, визуализация важный параметр. Ещё раз повторюсь, на локалке работает как часы.
Valick
24.07.2014 - 19:18
deflate, что меншает порционно запрашивать информацию с сервера?
_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
24.07.2014 - 19:45
Цитата (deflate @ 24.07.2014 - 18:38) |
задача простая. js открывает постоянное соединение, php асинхронно отдаёт данные в поток. Но так как буфер не сбрасывается, отдаёт пачками. |
Либо порциями сбрасывать, как Валик предлагает (для каждой порции отдельный запрос), либо использовать WinSocket, тогда нигде не будет проблем с буферами.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
deflate
24.07.2014 - 19:51
Цитата |
deflate, что меншает порционно запрашивать информацию с сервера?
|
каждый такой запрос, это инициализация приложения с кучей тяжёлых запросов к базе и т.д. А при открытом потоке, инициализация происходит только один раз
sergeiss
24.07.2014 - 22:00
Цитата (deflate @ 24.07.2014 - 19:51) |
А при открытом потоке, инициализация происходит только один раз |
Цитата (sergeiss @ 24.07.2014 - 19:45) |
использовать WinSocket |
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Valick
24.07.2014 - 23:16
Цитата |
это инициализация приложения с кучей тяжёлых запросов к базе и т.д |
вы про кеш вообще слышали?
_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
25.07.2014 - 00:07
Valick, у меня есть подозрение, что кэш ему тут не поможет. А вот сокеты как раз помогут.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Valick
25.07.2014 - 00:28
sergeiss, да я не против сокетов, есть еще и комет, но брать порцию из кеша, этож проще не придумаешь.
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.