Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.01.2013, 12:43
Jex Jex вне форума
Интересующийся
Отправить личное сообщение для Jex Посмотреть профиль Найти все сообщения от Jex
 
Регистрация: 14.11.2008
Сообщений: 10

Проблема с примером по Comet из статьи
Всем привет!
В конце статьи http://javascript.ru/ajax/transport/iframe
есть ссылка на пример с бесконечным iframe.

При нажатии на кнопку все срабатывает, но не так как надо - цифры (1,2,3) появляются в браузере сразу, а не последовательно с шагом в 1 секунду, как велит while и sleep(1). Причем появляются через время, которое необходимо затратить на завершение цикла - через 3 секунды.
Если менять количество проходок у цикла и значения у sleep , то время появления будет соответственно меняться.

В чем может быть дело?

Последний раз редактировалось Jex, 09.01.2013 в 13:51.
Ответить с цитированием
  #2 (permalink)  
Старый 09.01.2013, 18:04
Jex Jex вне форума
Интересующийся
Отправить личное сообщение для Jex Посмотреть профиль Найти все сообщения от Jex
 
Регистрация: 14.11.2008
Сообщений: 10

.htaccess:
php_flag output_buffering off
php_flag zlib.output_compression Off

Http-заголовки:
Date: Wed, 09 Jan 2013 13:59:37 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 3019
Server: Apache
Cache-Control: max-age=0
Expires: Wed, 09 Jan 2013 13:59:37 GMT

Хостер сказал, что они не используют gzip, по причине неактуальности.

Последний раз редактировалось Jex, 09.01.2013 в 18:06.
Ответить с цитированием
  #3 (permalink)  
Старый 11.01.2013, 15:13
Jex Jex вне форума
Интересующийся
Отправить личное сообщение для Jex Посмотреть профиль Найти все сообщения от Jex
 
Регистрация: 14.11.2008
Сообщений: 10

Итак, в ходе копалок выяснилось, что это довольно распространенная проблема.
В моем случае она связана с буферизацией и flush(); на сервере.
Ответить с цитированием
  #4 (permalink)  
Старый 13.01.2013, 23:25
Jex Jex вне форума
Интересующийся
Отправить личное сообщение для Jex Посмотреть профиль Найти все сообщения от Jex
 
Регистрация: 14.11.2008
Сообщений: 10

Проблема решена!
В качестве front-end перед сервером Apache используется Nginx, на котором настроена буферизация вывода. В моем случае изменить настройки Nginx невозможно.
Однако буфер Nginx можно заполнить информацией размером 64Кб, которая не будет выводиться пользователю (заполнение пробелами):

ob_implicit_flush(1);
for($i=0; $i<10; $i++)
{
     echo $i;
     //this is for the buffer achieve the minimum size in order to flush data
     echo str_repeat(' ',1024*64);
     sleep(1);
}


Надеюсь, это кому-нибудь пригодится.
comet, echo, gzip, output_buffering, flush, sleep, apache, nginx, php.ini, .htaccess

Последний раз редактировалось Jex, 13.01.2013 в 23:30.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с примером ragnar ExtJS 0 23.11.2012 10:26
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47