On 12.08.2011 11:52, Alex Knowles wrote:
On Thu, 2011-08-11 at 17:54 +0100, Nick Knutov wrote:
Hello all,
is it possible to run some code after sending response to upstream [and closing socket] with Dancer?
For example: I want to get request, send response and after closing socket to back-end do some job with big timeouts: write logs, send notifications via emails, etc.
Further to all the other answers. We use TheSchwartz quite heavily in our main (non dancer) environment. It's a little hairy, but a job queue (not necessarily TheSchwartz) may well be what you want...
I used a similar approach, to solve the same problem as OP, but I used beanstalk job queue. http://kr.github.com/beanstalkd/ It worked great, it's very fast and efficient, there are client libraries for all popular languages (including Perl, of course). It solves the problem of forking, but you still have to serialize data you want to send to your workers (processes doing stuff for you). What I liked is multiple tubes (in beanstalk nomenclature) - you can have one tube for logging, and another one for sending emails etc... And also persistance, beanstalkd (written in C, so very fast) can log job requests to file, so you won't lose any, even if you reboot server! Beanstalk is also very simple and easy to use, took me no longer than an hour to install it, configure it, modify original (PHP) code to dispatch requests to beanstalk, and write a simple worker (Perl) to just log some stuff to database. Logging AFTER the response has already been sent to web visitor. Yay! :) -- tydu