2012-01-19 4 views
0

Я использую один сервер cgi на сервере mamp apache. Когда я загружаю один сценарий, как:apache загружает cgi на "realtime"

эхо «ASD» сна 10 эхо «АСС» сон 20

мне нужно подождать 30 секунд, чтобы увидеть эхо. Он не выполняет рендеринг в строке, кажется, что сценарий требует полной загрузки для отправки данных.

Как настроить apache для возврата строки, а затем ждать 10 секунд, распечатать другую строку и затем подождать?

На php, если вы сделаете это, сценарий будет печататься, а затем спать, но мой сценарий bash не делает этого на cgi.

Если я запустил его с помощью bash script.cgi, он распечатает строку, подождите, распечатайте и подождите. Таким образом, это одна проблема с Apache.

ответ

0

Это буферизация браузера.

Apache не загружает скрипты cgi-bin. Он немедленно отправляет строку в браузер. Нечего делать на стороне apache/script. Может быть, есть некоторый нестандартный HTTP-заголовок, который вы можете присоединить к ответу, чтобы заставить браузер раньше отображать часть страницы, но я не знаю, какой.

0

Я нашел, что Firefox и Chromium buffer около 1 килобайта, чтобы эвристически определить, является ли вывод текстовым или двоичным. Для обычного текста вы можете выводить столько пробелов, либо для HTML создайте достаточно большой комментарий. После этого содержимое может быть постепенно отображено.

В моих тестах обычный скрипт CGI не работал с буферизацией Apache для gzip вывода (я использовал Wireshark). Вместо этого я написал сценарий No Parsed Headers (NPH), который сам по себе обрабатывал кодировку с коротким передачей.

Смежные вопросы