On Sun, 15 Feb 2015, silvioprog wrote:

On Sun, Feb 15, 2015 at 7:11 AM, Michael Van Canneyt <mich...@freepascal.org> 
wrote:
[...]
      Very nice.

      Some remarks:

      - KeepConnection logic already existed. It is part of the fastcgi 
protocol.

        Normally, the apache server must send a keepconnection option as part 
of the request.
        See the 'FKeepConnectionAfterRequest' variable in TFCGIrequest, it is 
processed when
        the FCGI_BEGIN_REQUEST block comes in and is checked after each request.

        The fact that you apparently needed to introduce special processing 
means the proxy
        module does not correctly set this option. To test, you can check the 
value of the flag
        in the request handler.

        I also suggest you look at the existing implementation of 
KeepConnection and see
        where that needs to be changed, instead of introducing new 
KeepConnection handling.


I saw, and it works fine in nginx, but ...

      - if you really need to introduce  an additional flag, please put an 
extra flag in
        ProtocolOptions. Something like 'poDefaultKeepConnection'.
        Do not introduce new booleans 'options' when an option set exists...


... in Apache, using proxy mode, keepconn always returns true. =/ So we need to 
add a 'poProxyKeepConnection' flag.

Wait, I do not understand. If keepconn always returns true, then all should work as-is ? Why do you need the flag ?

What happens if you set enablereuse=off in the apache config ?

 
      - Don't change the constructor signature, that is bad practice.

        A TComponent constructor must be Create(AOwner : TComponent);

        if you really want to change it, just create another one:
        Constructur CreateCustom(AOwner : TComponent; KeepConnection : Boolean);

        For components, properties must always be settable after create,
        otherwise streaming does not work correctly.


Done. Please see the code in attached (some changes in mycustfcgi too).

Thank you.


After your tips, now I'm able to implement the changes in original custfcgi and 
send a patch. One more question before continuing: after implementing the pool, 
we will still need RequestsArray?

Normally yes, even more so than in the current implementation. IMHO you will maybe need 2 arrays: Incoming (request), outgoing(response).

- New Request comes in. - No thread to handle request is available in pool.
- Request is accepted and put in incoming requestsarray.
- Check outgoing response array, send back any responses.
- When Thread finishes a request, puts it in outgoing responses array.

Details will depend heavily on the way the pool is handled.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to