[FASTCGI] Hello and a Threading/External Server/Win32 question

Jay Sprenkle jsprenkle at gmail.com
Thu Apr 16 18:23:34 EDT 2009


I looked into lighttpd's source. The author detests windows and refuses to
port to it.


On Thu, Apr 16, 2009 at 4:36 PM, Shane Calimlim <shanecalimlim at gmail.com>wrote:

> I was considering looking into some web server source, I know Apache
> maintains a thread pool for responding to a single port, and I'm pretty sure
> lighttpd does too (lighttpd's source is a lot smaller, so it would probably
> be easier to locate what they are doing).
>
> If I find an answer I will definitely let you know; please let me know if
> you do too!
>
>
> On Thu, Apr 16, 2009 at 2:28 PM, Jay Sprenkle <jsprenkle at gmail.com> wrote:
>
>> I looked at this too and found the answer in cygwin. They duplicate a lot
>> of the functionality of unix and have already been down this path. Here's
>> the clue I found:
>> http://www.mail-archive.com/cygwin@cygwin.com/msg62458.html
>>
>> I may be wrong but the short answer seems to be you can't pass open file
>> handles that are tcp connections between processes because windows doesn't
>> treat everything (tcp connections) as a file. I've not seen any way to get
>> fastcgi to work on windows as the official specs specify (since you must
>> pass more than a file handle between processes).
>>
>> If you get it to work I'd love to see how.
>>
>> If you use a named pipe on the other hand things get easier, and named
>> pipes are supposed to be faster than tcp connections too.
>>
>>
>>
>>
>>  On Thu, Apr 16, 2009 at 3:59 PM, Shane Calimlim <shanecalimlim at gmail.com
>> > wrote:
>>
>>>  Hi, first let me say that I'm new to the list, but I've been using (and
>>> loving) FastCGI for years -- great work everyone involved.
>>>
>>> I'm working on a FastCGI external server (using a port) with multiple
>>> threads.  The problem I'm having is that even with multiple threads, only
>>> one request is being handled at a time.  Multiple threads are handling them,
>>> but FCGX_Accept_r() is locking until the previous request's FCGX_Finish_r()
>>> is called.
>>>
>>> I am also using the Qt framework; in the code snippets below qDebug() is
>>> just a debugging printf().
>>>
>>> Here is the code I'm using:
>>>
>>> In main():
>>>
>>>     if( FCGX_Init() != 0 )
>>>     {
>>>         qDebug( "FCGX_Init() error." );
>>>         ::exit( 1 );
>>>     }
>>>     g_listenSocket = FCGX_OpenSocket( ":9000", 100 );
>>>     if( g_listenSocket < 0 )
>>>     {
>>>         qDebug( "FCGX_OpenSocket() error." );
>>>         ::exit( 1 );
>>>     }
>>>
>>>     //spawn threads and wait until they all terminate
>>>
>>> In each thread:
>>>
>>>     FCGX_Request request;
>>>     if( FCGX_InitRequest( &request, g_listenSocket, 0 ) != 0 )
>>>     {
>>>         qDebug( "FCGX_InitRequest() error." );
>>>         ::exit( 1 );
>>>     }
>>>
>>>     int status;
>>>     for(;;)
>>>     {
>>>         status = FCGX_Accept_r( &request );
>>>         if( status != 0 )
>>>         {
>>>             qDebug( "FCGX_Accept_r() error." );
>>>             ::exit( 1 );
>>>         }
>>>
>>>         FCGX_FPrintF( request.out, "Content-Type: text/plain\r\n\r\n" );
>>>         FCGX_FPrintF( request.out, "Hello World!\n" );
>>>         for( int i = 1; i <= 10; ++i )
>>>         {
>>>             msleep( 1000 ); // this is a Qt function -- a 1 second sleep
>>>             FCGX_FPrintF( request.out, "%d\n", i );
>>>             FCGX_FFlush( request.out );
>>>         }
>>>         FCGX_Finish_r( &request );
>>>     }
>>>
>>> I've tried various combinations with Init/OpenSocket being in each
>>> thread, but have had no luck with those.  I've also tried WSADuplicateSocket
>>> on g_listenSocket, but Windows complains that it is not a socket.
>>>
>>> Is this possible at all?  Is it possible on Windows?  The target platform
>>> is Linux, but I develop on Windows, so having it work identically on my dev
>>> machines would be very useful.
>>>
>>>
>>> _______________________________________________
>>> FastCGI-developers mailing list
>>> FastCGI-developers at mailman.fastcgi.com
>>> http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers
>>>
>>>
>>
>>
>> --
>> --
>> The PixAddixImage Collector suite:
>> http://groups-beta.google.com/group/pixaddix
>>
>> SqliteImporter and SqliteReplicator: Command line utilities for Sqlite
>> http://www.reddawn.net/~jsprenkl/Sqlite<http://www.reddawn.net/%7Ejsprenkl/Sqlite>
>>
>> Cthulhu Bucks!
>> http://www.cthulhubucks.com
>>
>
>


-- 
--
The PixAddixImage Collector suite:
http://groups-beta.google.com/group/pixaddix

SqliteImporter and SqliteReplicator: Command line utilities for Sqlite
http://www.reddawn.net/~jsprenkl/Sqlite

Cthulhu Bucks!
http://www.cthulhubucks.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.pins.net/mailman/private.cgi/fastcgi-developers/attachments/20090416/49b68ca4/attachment-0001.html>


More information about the FastCGI-developers mailing list