On 02/10/2010 10:38 AM, Shao, David (NIH/NLM/NCBI) [C] wrote: > I use CGI::Application for my web app. The app sometimes takes longer to run > than the timeout limit set by the apache server, which results in a 'Bad > Gateway' page at user side. My web admin suggested I need to implement > something similar to 'heartbeat' to keep the connection alive. My > interpretation to this is, while my app is running, it needs to send a > 'keepalive' packet to the client in short intervals (i.e. shorter than the > timeout limit), to prevent the server from dropping the connection. I am > fairly new to CGI::Application, and my questions are if this feature already > exists (but I can't find it in documentation), or if it is not, is it > possible to implement using CGI::Application?
The is similar to what the C::A::Plugin::Stream does. Basically you tell C::A not to send headers and then you print your own response. The difference being that you don't want to send actual content while your app is working, but just empty data to hold the connection. Something like this: $self->header_type('none'); my $not_done = 0; while($not_done) { print "\0"; # send null byte to keep the connection open ... # do some work } If the long running task you want to do can't be broken up into chunks such that you can print a null byte, then you need to rethink your architecture. Probably best to think about having a job queue which does the work and a URL that your page contantly hits to figure out if the job is done. When it's done you can then redirect the client to where you want them to go. -- Michael Peters Plus Three, LP ##### CGI::Application community mailing list ################ ## ## ## To unsubscribe, or change your message delivery options, ## ## visit: http://www.erlbaum.net/mailman/listinfo/cgiapp ## ## ## ## Web archive: http://www.erlbaum.net/pipermail/cgiapp/ ## ## Wiki: http://cgiapp.erlbaum.net/ ## ## ## ################################################################