fastcgi multithreading
От: iHomer  
Дата: 27.04.11 09:19
Оценка:
Друзья,
подскажите, в fcgilib со связкой с lighttpd возможно сделать мультипотоковую обработку запроса ?
Т.е. такой код:
#include <string>
#include <iostream>
#include "fcgi_stdio.h"

#include <boost/thread.hpp>

boost::mutex acc_m, pr_m;

struct f
{
    int id;
    FCGX_Request request;

    f(int _id, FCGX_Request _request) : id(_id), request(_request) {}

    void operator() ()
    {
        int reqCounter = 0;

        int acc = 1;
        {
            boost::mutex::scoped_lock a(acc_m);
            acc = FCGX_Accept_r(& request);
        }

        while(! acc)
        {
            reqCounter ++;
            {
                boost::mutex::scoped_lock a(pr_m);
                FCGX_FPrintF(request.out,
                    "Set-Cookie: AA=123-3232-434ffds3\r\n"
                    "Content-type: text/html\r\n"
                    "\r\n"
                    "<b>%d</b><br>%d", reqCounter, id); 

                FCGX_Finish_r(&request);
            }

            {
                boost::mutex::scoped_lock a(acc_m);
                acc = FCGX_Accept_r(& request);
            }
        }
    }
};

int main(int argc, char * const argv[])
{
    if(FCGX_Init())
        exit(1);

     int listen_socket = FCGX_OpenSocket(":5329", 400);
     if(listen_socket < 0)
        exit(1);

     FCGX_Request request;
     if(FCGX_InitRequest(& request, listen_socket, 0))
         exit(1);

     boost::thread_group th;
     th.create_thread(f(0, request));
     th.create_thread(f(1, request));

     th.join_all();

     return 0;
}


Сомнения в том, что Accept_r принимает запрос из сокета от одного клиента в один поток,
а от второго клиента во второй поток.
Но если придется ответ в сокет из потоков в обратном порядке, т.е. сначала второй поток, затем первый.
То веб сервер отправит ответ не тому клиенту ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.