Apache загружает CGI в режиме реального времени - PullRequest
0 голосов
/ 19 января 2012

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

эхо "asd" спать 10 эхо "дса" спать 20

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

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

На php, если вы это сделаете, скрипт напечатает, а затем спит, но мой bash-скрипт не делает этого на cgi.

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

Ответы [ 2 ]

0 голосов
/ 29 марта 2013

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

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

0 голосов
/ 14 марта 2012

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

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

...