LINUX.ORG.RU

Как заставить апач отдавать страницу клиенту...

 ,


0

1

... до того как cgi скрипт завершится?

Трабла в том, что апач ждет полного завершения cgi скрипта и только после этого отправляет все что было выведено в stdout (я имею ввиду, выхлоп cgi скрипта). Более другие сервера умеют отдавать клиенту страницу по мере получения ее текста от скрипта. С апачем не прокатывает... :(

★★★★★

Последнее исправление: Suntechnic (всего исправлений: 1)

Оторвать CGI от терминала (man 3 daemon, например). Могу подкинуть вариант без daemon, но об этом во всех учебниках сказано.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Suntechnic

Апач отдаст выхлоп CGI только после того, как CGI завершится или закроет терминал связи с апачем (stdin, stdout и stderr) + еще надо сигналы игнорировать кое-какие (чтобы апач не прибил затянувшийся в исполнении CGI).

Ну, а общение с клиентом производить другим - служебным - CGI.

Если так делать не хочется - man websockets.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ага. Понял. Но если я закрою терминал связи, как я потом отдам апачу продолжение страницы? Не - такое не подходит... Фишка в том, что мой cgi отдает страницу по мере готовности. Хотелось бы что бы она сразу уходила клиенту. Браузеры умеют подтягивать css и js из head до завершения загрузки страницы. Таким образом, даже если на странице у меня есть что-то долго вычислимое, я хотел бы отправить клиенту хотя бы head ну и может быть хедер страницы - пусть пока я считаю, подгружает css, js, картинки из шапки, бэкграунды, наконец...

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Но если я закрою терминал связи, как я потом отдам апачу продолжение страницы?

Я ссылочку дал - можно посмотреть. Естественно, в таких случаях если мы не хотим пользоваться вебсокетами, то просто запускаем CGI в первый раз как демон, а в следующие разы получаем информацию от него (средств IPC - вагон и маленькая тележка) и отдаем клиенту.

Фишка в том, что мой cgi отдает страницу по мере готовности.

Ну так и отдавать ее по частям при помощи вспомогательного CGI.

Eddy_Em ☆☆☆☆☆
()

А если делать периодически fflush(stdout) или его аналог? Есть подозрение, что всё дело в буферизации данных.

sjinks ★★★
()
Ответ на: комментарий от sjinks

Навряд ли. Ведь flush это сторона приложения, а оно же великолепно работает с gatling'ом отлично отдавая именно то, что надо.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от xtraeft

Я уже ставлю вопрос о том что нафиг этот апач. Но модные сервера не умеют работать с cgi - они настолько модные, что им только fcgi нужен. Простые и быстрые сервера не умеют rewrite и блокировать доступ избирательно к файлам и папкам... Если бы я мог заставить gatling обращаться к одному и тому же cgi скрипту вне зависимости от запроса - я бы его накормил чем надо. И rewrite бы сам распутал и все остальное...

Уже думаю может ну его нафик - запилить в приложении работу с сокетами и послать все эти чудосервера в сад...

Suntechnic ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.