Всем приветЕсть код:
#include "fcgi_stdio.h" /* fcgi library; put it first*/#include <stdlib.h>
int count;
void initialize(void)
{
count=0;
}int main()
{
/* Initialization. */
initialize();/* Response loop. */
while (FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI Hello! (C, fcgi_stdio library)</title>"
"<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>"
"Request number %d running on host <i>%s</i>\n",
++count, getenv("SERVER_HOSTNAME"));
}
}Я его успешно скомпилировал, получил бинарник.
Как мне теперь заставить веб сервер соединится с моей программой?
Как указать сокет, например /tmp/fastcgi.sock, чтобы сервер соединялся с ним?Сервер: nginx/0.5.34
Помогите пожалуйста
С уважением, Алексей
1) Это C, а не C++.
2) nginx.ru - раздел документация, + в дефолтном конфиге должен быть пример (1-2 строчки конфига).
>1) Это C, а не C++.
>2) nginx.ru - раздел документация, + в дефолтном конфиге должен быть пример
>(1-2 строчки конфига).Возможно непонятно поставил вопрос, прошу прощения.
Вопрос скорее к тем людям, которые писали программы с использованием fcgi library.
Как настроить nginx я в курсе, интересует как указать полученной программе хост+порт на котором висеть или unix сокет.
>Возможно непонятно поставил вопрос, прошу прощения.
>Вопрос скорее к тем людям, которые писали программы с использованием fcgi library.
>Как настроить nginx я в курсе, интересует как указать полученной программе хост+порт
>на котором висеть или unix сокет.Можно узнать зачем вам указывать fcgi-скрипту на каком хосте и порту висеть?
>Как настроить nginx я в курсе, интересует как указать полученной программе хост+порт
>на котором висеть или unix сокет.Не надо висеть. Работает так же как и php скрипт - запускается сервером. Серевер передаёт ему параметры и забирает вывод.
>Не надо висеть. Работает так же как и php скрипт - запускается
>сервером. Серевер передаёт ему параметры и забирает вывод.всю мазу испортил. мы тут тотализатор устроили по поводу насколько быстро чел фтыкнет че-почем на основе наводящих вопросов... а ты все обломал :)
Есть 2 пути запуска: через свапер (лучше всего для этих целей подходит из комплекта поставки lighttpd) - в этом случае все диалог с программой будет проходить через std{in,out,err}; либо биндить сокет и самостоятельно обрабатывать его обслуживать.
>Есть 2 пути запуска: через свапер (лучше всего для этих целей подходит
>из комплекта поставки lighttpd) - в этом случае все диалог с
>программой будет проходить через std{in,out,err}; либо биндить сокет и самостоятельно обрабатывать
>его обслуживать.Попробовал запустить через свапер, программа в процессах есть, но nginx соединится с ней не может.
>>либо биндить сокет и самостоятельно обрабатывать
Где можно про это подробнее почитать не подскажете?
С уважением, Алексей
Для C - искать в примерах к библиотеки, если таковы имеются. очень мало кто пишет на С веб-интерфейсы, из них еще меньше под фастцги. По скорости запуск С-программы в CGI, от FastCGI почти не будет отличаться, т.к. после обращения к файлу ОС его кеширует, собственно поэтому нет смысла...
>По скорости запуск С-программы в CGI, от FastCGI почти не
>будет отличаться, т.к. после обращения к файлу
>ОС его кеширует, собственно поэтому нет смысла...Помедетируй почему я не буду волноваться если мой эфсиджиай сервер будет грузиться скажем 5 минут? И буду совершенно убит если сиджиай - займёт 5 секунд :)
Ну я даже не знаю, может вам к врачу стоит обратится :)
>Ну я даже не знаю, может вам к врачу стоит обратится :)
>А у вас имя подозрительное ...
FCGI server загружается единожды и висит в памяти, CGI - поднимается на каждый запрос. Про то что оно в кэше окажется - ну если у вас рамы 16GB и 1 запрос в минуту и больше ничего и нет .... то вам с FCGI и в самом деле париться не стоит :)
Если скрипт _выполняется_ 5 секунд, то fastcgi ему ничем не поможет. fastcgi всего-лишь сокращает время загрузки, интерпретации для скриптов и, не для всех языков, инициализации ресурсов. Для сишной программы только последнее может быть актуальным, например если идет работа с ораклом. Так что ваше утверждение либо неправильно сформулировано, либо абсурдно.
>Если скрипт _выполняется_ 5 секунд,Моё сообщение всё еще не потерто - можно указать где я говорил про _выполняется_?
>Так что ваше утверждение либо неправильно сформулировано, либо абсурдно.
Либо у вас проблемы с русским языка :)
Хотя похоже в потрохах технологии вы разобрались.
Кстати, не обязятельно с оракалом - инициализация коннекта к любой базе уже стоит того, чтобы уйти на FCGI и иметь connections pool :)
По-порядку:
1) Яица не жмут?
2) Речь все-таки идет не о скриптовом фцги, а сишном - это принципиальная разница.
3) ОС кеширует все что попадается ей под руку, и хрен знает каким надо быть программистом, чтобы умудриться написать код, размер которого после компиляции будет весить 16 гиг.
4) Да у меня есть машины с 16 и 32 гигами памяти, - но они под БД, под веб - 1гиг - даже 10% не выедается.
5) Речь все-таки не о коннектах к БД, а целесобразность веб программирования на си.
>[оверквотинг удален]
>>его обслуживать.
>
>Попробовал запустить через свапер, программа в процессах есть, но nginx соединится с
>ней не может.
>
>>>либо биндить сокет и самостоятельно обрабатывать
>
>Где можно про это подробнее почитать не подскажете?
>
>С уважением, Алексейhttp://trac.lighttpd.net/trac/browser/trunk/src/spawn-fcgi.c
spawn-fcgi-1.4.11 - spawns fastcgi processes
usage:
-f <fcgiapp> filename of the fcgi-application
-a <addr> bind to ip address
-p <port> bind to tcp-port
-s <path> bind to unix-domain socket
-C <childs> (PHP only) numbers of childs to spawn (default 5)
-P <path> name of PID-file for spawed process
-n no fork (for daemontools)
-v show version
-h show this help
(root only)
-c <dir> chroot to directory
-u <user> change to user-id
-g <group> change to group-id