The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Написание своего Fast-CGI приложения"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Написание своего Fast-CGI приложения"  
Сообщение от denner (ok) on 12-Апр-09, 05:46 
Передо мной встала задача - написать приложение для fastCGI(используется nginx). Здесь я сначала особых проблем не видел, ибо настраивается всё легко, сам принцип fCGI тоже понятен.
Для разработки я использую машину с WinXP SP2, NetBeans6.5.1, MinGM, MSYS. Всё кроссплатформенное пишется на ура.
Сразу найдя статью на хабре(http://habrahabr.ru/blogs/perl/52980/) и погуглив понял что мало кто пишет мануалы о написании fCGI-apps на с/с++.
Настроил nginx как было написано в статье добавив только строчки:

      location /app/ {
            fastcgi_pass   localhost:9000;
        }

Скачал готовый(было лень компилить) SDK как написано на http://pagc.wiki.sourceforge.net/Software_Requirements?f=print. Всё ок. Всё что нужно там есть (static, dyn либы и хёдеры).
Создал проект в NetBeans, копирнул первый попавшийся экземпл(echo.c) из http://fastcgi.com/dist/fcgi-2.4.0.tar.gz.

И тут самое страшное... Оно ведь не биндится на сокет как нужно для fastCGI, в сырце ничего подобного нет! Но скомпилилось и бросало в консоль инфу после чего благополучно закрывалось(без ошибок).
Почитав и погуглив я понял что можно спаунить процесс через тулзу Spawn-FCGI из комплекта Lighttp.

Скачал сборку для win32, копирнул в отдельную папку Spawn-FCGI.exe, cygwin1.dll, echo.exe, fcgi.dll.
Создал bat-файл такого содержания:

"Spawn-FCGI.exe -f ecto -a 127.0.0.1 -p 9000
pause"

Первый запуск... Ура! В консоль написалось что процесс заспаунился и выдало его pid! Затем выполнилось pause дав это прочитать.
На радостях зашёл на http://localhost/app/ и... ничего. Nginx не может подсоединиться к процессу. Ну и правильно. Процесса то с таким пидом нет, а значит и слушать 9000й порт некому. Подумал что мб вывалилось приложение, ну бывает, и запустил bat-файл ещё раз. Тут я увидел страшное:

spawn-fcgi.c.230: child exited with: 127

И более spawn-fcgi мне не выдавал что смог запустить процесс. Всё время пишет это. Я перепробовал большое кол-во сырцов, некоторые выдавали даже ошибку 0, но почти все 127.

Нагуглил топик https://www.opennet.ru/openforum/vsluhforumID9/7570.html. Вот! То что нужно! - подумал я. Но никакой информации кроме той что знаю я так получить и не смог.

Уже часов 6 пытаюсь разобраться. Надежда только на вас.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Написание своего Fast-CGI приложения"  
Сообщение от denner (ok) on 12-Апр-09, 06:50 
Поставил cygwin и скомпилил примеры с его помощью. И попробовал использовать скомпилинный им же cgi-fcgi.exe. На примере echo.exe пашет, а с спауном он лайти - нет. Буду теберь думать перейти с MinGW на cygwin...
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Написание своего Fast-CGI приложения"  
Сообщение от angra (ok) on 12-Апр-09, 07:02 
>Нагуглил топик https://www.opennet.ru/openforum/vsluhforumID9/7570.html. Вот! То что нужно! - подумал я. Но никакой
>информации кроме той что знаю я так получить и не смог.

Ну из этого топика можно было вынести понятие, что fastcgi приложение может либо быть standalone, либо использовать внешний fastcgi сервер для spawn. Соответственно оно по разному пишется. А вы один и тот же код пытались запихнуть в оба варианта.
Также в том топике была еще одна важная мысль - писать cgi/fastcgi на С это извращение.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Написание своего Fast-CGI приложения"  
Сообщение от denner (ok) on 12-Апр-09, 07:25 
>>Нагуглил топик https://www.opennet.ru/openforum/vsluhforumID9/7570.html. Вот! То что нужно! - подумал я. Но никакой
>>информации кроме той что знаю я так получить и не смог.
>
>Ну из этого топика можно было вынести понятие, что fastcgi приложение может
>либо быть standalone, либо использовать внешний fastcgi сервер для spawn. Соответственно
>оно по разному пишется. А вы один и тот же код
>пытались запихнуть в оба варианта.
>Также в том топике была еще одна важная мысль - писать cgi/fastcgi
>на С это извращение.

Да, всё это я уже знал. Поэтому сразу и знал что нужно именно приложение для spawn. Не знаю от чего вы подумали что я пишу приложение на С, верно из-за того что я в качестве примера сначала скомпилил именно echo.c. Уверяю вас, пишу я на С++ и буду писать своё приложение именно на нём.
Сейчас экспериментирую с cygwin и MinGW. Всёже скорость МинГВ и размеры конечных файлов говорят что лучше именно он. Но вот то что он странно линковал SDK... Но и сигвин юзать не хочется ибо старые репы(буст только 1.33), да и остальное.
Сейчас попробую заставить МинГВ нормально скомпилить и слинковать SDK.

А что вы предпочитаете? MinGW али Cygwin ? Если можно, аргументируйте.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Написание своего Fast-CGI приложения"  
Сообщение от angra (ok) on 12-Апр-09, 08:00 
>Уверяю вас, пишу я на С++

Да какая разница С или С++ в этом вопросе, зачем вообще компилируемые языки для cgi, особенно для кроссплатформенного?


>А что вы предпочитаете? MinGW али Cygwin ? Если можно, аргументируйте.

Я предпочитаю linux :)
Обе среды используют gcc, вопрос только каких версий и с какими флагами, плюс библиотеки обеспечивающие кроссплатформенность разные. Есть еще третий вариант - winelib. Важный момент: не стоит смешивать разные либы совместимости в одном проекте.

Вы бы код приложения, которое пытаетесь запустить показали. Также вызывает сомнения -f ecto, неужто именно так называется программа и как винда реагирует на отсутствие .exe?

Весьма вероятно, что вам поможет http://redmine.lighttpd.net/boards/2/topics/686

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Написание своего Fast-CGI приложения"  
Сообщение от denner (ok) on 12-Апр-09, 08:47 
>[оверквотинг удален]
>Обе среды используют gcc, вопрос только каких версий и с какими флагами,
>плюс библиотеки обеспечивающие кроссплатформенность разные. Есть еще третий вариант - winelib.
>Важный момент: не стоит смешивать разные либы совместимости в одном проекте.
>
>
>Вы бы код приложения, которое пытаетесь запустить показали. Также вызывает сомнения -f
>ecto, неужто именно так называется программа и как винда реагирует на
>отсутствие .exe?
>
>Весьма вероятно, что вам поможет http://redmine.lighttpd.net/boards/2/topics/686

На счёт языков:
Да, хороший вопрос, но не хочется мне писать на питоне/руби/перле.

А версии да, разные. В сигвине 3.4.4 а в мингв аж 4.3.3. Самое главное что я вроде нашёл проблему компиляции в мингв. Т.е. как минимум это проблема:

checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... no
checking for stdlib.h... no
checking for string.h... no
checking for memory.h... no
checking for strings.h... no
checking for inttypes.h... no
checking for stdint.h... no
checking for unistd.h... no
checking for gcc option to accept ANSI C... none needed
checking for ssize_t... no
checking for sun_len in sys/un.h... no
checking for fpos_t in stdio.h... yes
checking for sys/socket.h... no

Однако в мингв всё есть. Пробовал флаги --includedir и --oldincludedir. Не помогло. Однако меня сразу удивило:

checking for sys/types.h... yes
checking for sys/stat.h... no

Т.е. в папке sys есть types.h но нет stat.h. Но там всё есть. Я сразу решил посмотреть отчёт:

configure:7756: checking for sys/types.h
configure:7768: gcc -c -g -O2  conftest.c >&5
configure:7771: $? = 0
configure:7774: test -s conftest.o
configure:7777: $? = 0
configure:7787: result: yes
configure:7756: checking for sys/stat.h
configure:7768: gcc -c -g -O2  conftest.c >&5
In file included from configure:7762:
confdefs.h:9:25: warning: missing whitespace after the macro name
configure:7764:5: error: token "" is not valid in preprocessor expressions
configure:7771: $? = 1
configure: failed program was:
#line 7762 "configure"
#include "confdefs.h"
#include <stdio.h>
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# if HAVE_STDLIB_H
#  include <stdlib.h>
# endif
#endif
#if HAVE_STRING_H
# if !STDC_HEADERS && HAVE_MEMORY_H
#  include <memory.h>
# endif
# include <string.h>
#endif
#if HAVE_STRINGS_H
# include <strings.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#else
# if HAVE_STDINT_H
#  include <stdint.h>
# endif
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#include <sys/stat.h>
configure:7787: result: no
configure:7756: checking for stdlib.h
configure:7768: gcc -c -g -O2  conftest.c >&5
In file included from configure:7762:
confdefs.h:9:25: warning: missing whitespace after the macro name
configure:7764:5: error: token "" is not valid in preprocessor expressions
configure:7771: $? = 1
configure: failed program was:
...

error: token "" is not valid in preprocessor expressions

Что это за баг версии 4,3,3 или как? Это можно вылечить? Я даже не знаю что делать. Есть предположение что он просто не может использовать пробелы между # и include. Есть идеи как поправить?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Написание своего Fast-CGI приложения"  
Сообщение от NaN on 13-Апр-09, 05:51 
>>[оверквотинг удален]
>Что это за баг версии 4,3,3 или как? Это можно вылечить? Я
>даже не знаю что делать. Есть предположение что он просто не
>может использовать пробелы между # и include. Есть идеи как поправить?

Ну в принципе можешь и ещё пару месяцев поизвращаться и поставить что-то юниксовое только потом :)
Как ты тут продемонстрировал ты серьёзно "плаваешь" даже в базовых вещах, а чтобы натянуть программу на "гетерогенщину" нужны более серьёзные знания по всем системам в неё входящим.
Если уж совсем без форточки не можешь - ставь что нить из юниксов в виртуальную машину - и всё само пойдёт ...
Кстати - что CGI что FCGI писать на низкоуровневых С и С++ м-мм ... нерационально :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Как скомпилировать fastcgi под MinGW?"  
Сообщение от denner (ok) on 13-Апр-09, 20:01 
Базовых вещах? Извольте. Я предлагаю таковые объяснения только из-за безысходности. Я хорошо понимаю что "использовать пробелы между # и include" это более чем нормально.
"баг версии 4,3,3 или как" - я имел ввиду баг версии в мингв, лишь предположил что возможно это баг.
"Это можно вылечить?" - я предположил что есть фиксы или иной способ(использование иной версии минГВ).
С FastCGI я знаком уже давно и не по наслышке, только вот своё fcgi приложение пришлось писать первый раз.
То что сразу лог скрипта конфигурации не глянул - поторопился.
Поверь, знаний то у меня хватает как в "базовых частях", так и в "более серьёзных знаниях по всем системам в неё входящим".
Не знаю по чему ты можешь ещё судить.
А вот поставить юниксовое - это да. Уже стоит арч и не ощущаю проблем с ним, но всёже достаточно часто приходится использовать MSVS для иных проектов, а запускать виртуальную машину для неё не очень хочется.
Однако хочется использовать именно минГВ.

Сузим запрос для "вас":

"Как скомпилировать fastcgi под MinGW?"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру