Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нет спаунинга: программа FastCGI на Си (LightTPD) 
:(
    Опции темы
urgun
Дата 31.3.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Здравствуйте. Сделал по примеру из webkit многопоточный FastCGI:
Код

#include <iostream>
using namespace std;

#include <stdio.h>
#include <windows.h>

#include "aolexp.h"
#include "fcgi_config.h"
#include "fcgiapp.h"

const int threadscount = 10;
CRITICAL_SECTION acceptrsection;

int __stdcall ServerThread(void*){
    int acceptrresult;
    FCGX_Request request;
    FCGX_InitRequest(&request, 0, 0);
    for(;;){
        EnterCriticalSection(&acceptrsection);
            acceptrresult = FCGX_Accept_r(&request);
        LeaveCriticalSection(&acceptrsection);
        if(acceptrresult<0)
            break;
        FCGX_FPrintF(request.out,
            "Content-type: text/html\r\n"
            "\r\n"
            "<title>FastCGI Hello! (multi-threaded C, fcgiapp library)</title>"
            "<h1>FastCGI Hello! (multi-threaded C, fcgiapp library)</h1>");
        FCGX_Finish_r(&request);
    }
    return 0;
}

int main(){
    InitializeCriticalSection(&acceptrsection);
    FCGX_Init();
    DWORD tid;
    for(int i=1; i<threadscount; i++)
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ServerThread, NULL, 0, &tid);
    ServerThread(NULL);
    return 0;
}

Потом настроил в конфигах сервера
Код

fastcgi.server             = ( ".e" =>
                               ( "localhost" =>
                                 (
                                    "socket" => "TMP/exe-aols.socket",
                      "bin-path" => "/cygdrive/f/aols/aols/aols.exe"
                                 )
                               )
                             )

Проблема в том, что программа вообще не "спаунится" сервером. Т.е. он что-то там делает:
Код

2010-03-31 22:56:35: (log.c.166) server started
2010-03-31 22:56:35: (mod_fastcgi.c.1367) --- fastcgi spawning local
        proc: /cygdrive/f/aols/aols/aols.exe
        port: 0
        socket TMP/exe-aols.socket
        max-procs: 4
2010-03-31 22:56:35: (mod_fastcgi.c.1391) --- fastcgi spawning
        port: 0
        socket TMP/exe-aols.socket
        current: 0 / 4
2010-03-31 22:56:35: (mod_fastcgi.c.1391) --- fastcgi spawning
        port: 0
        socket TMP/exe-aols.socket
        current: 1 / 4
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
unknown listenType (0)
2010-03-31 22:56:35: (mod_fastcgi.c.1391) --- fastcgi spawning
        port: 0
        socket TMP/exe-aols.socket
        current: 2 / 4
unknown listenType (0)
2010-03-31 22:56:35: (mod_fastcgi.c.1391) --- fastcgi spawning
        port: 0
        socket TMP/exe-aols.socket
        current: 3 / 4
unknown listenType (0)
unknown listenType (0)

Но программы нет в списке процессов и соответственно на запросы она не отвечает... Может кто знает в чем проблема...
Компилировал в MSVC и mingw. Но ведь компилятор по сути не имеет значения.
Еще пробовал так (такой вариант работает, но он не многопоточный - мне не подходит):
Код

    ..........
    std::string port=":9001";    
    int listenQueueBacklog = 400;
    FCGX_Request request;
    if(FCGX_Init())exit(1);
    int listen_socket = FCGX_OpenSocket(port.c_str(), listenQueueBacklog);
    if(listen_socket < 0)exit(1);  
    if(FCGX_InitRequest(&request, listen_socket, 0))exit(1);
    while(FCGX_Accept_r(&request) == 0){        
    ..........

С таким конфигом (спаунил вручную):
Код

fastcgi.server             = ( "/" =>
                               ( "sdfsdfsdfsdf" =>
                                 (
                                   "host" => "127.0.0.1",
                       "port" => "9001"
                                 )
                               )
                             )

Если делать так, как выше, но для нескольких потоков, видимо нужно в каждом потоке ставить разные номера портов, потом в конфиге прописывать распределение нагрузки:
Код

fastcgi.server = ( "/" =>
                   ( "server1" =>
                     ( "host" => "10.0.0.3",
                       "port" => 1030 ),
                     "server2" =>
                     ( "host" => "10.0.0.3",
                       "port" => 1030 )
                   )
                 )

Но это слишком сложно, вопрос в том как добиться того, чтобы сервер сам спаунил программу...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.