NAME
Message::Passing::PSGI - ALPHA QUALITY PSGI adaptor for Message::Passing
SYNOPSIS
# Run the server - note that the -e has to all be on one line!
plackup -E production -s Twiggy -MPlack::App::Message::Passing -e'Plack::App::Message::Passing->new(return_address => "tcp://127.0.0.1:5555", send_address => "tcp://127.0.0.1:5556")->to_app'
# Run your app with the handler
plackup -E production -s Message::Passing testapp.psgi --host 127.0.0.1 --port 5556
# Browse to:
http://localhost:5000/
DESCRIPTION
ALPHA QUALITY EXPERIMENT - YOU HAVE BEEN WARNED!
This module implements a mongrel2 like strategy for web handlers, using Message::Passing::ZeroMQ.
WHY
Because I could! It's a useful experiment to prove that Message::Passing can be used for things entirely unlike my initial goals.
NO, REALLY?
Theoretically, this is quite an interesting model - as you've totally split the front end connection acceptance and the back end request handling, you can do things which are harder in other server environments trivially.
Examples of things that 'just work' include:
- Adding more handler processes
-
Totally dynamic, run as many as you want
- Adding handler processes on other servers
-
As long as your send/return sockets are bound to a host that's network accessible, you can spin up handlers wherever you want.
- Upgrade the application in production
-
You can spin up a new version, verify it appears to be working correctly etc before shutting down the old version
- Profile the application in production
-
Just run a handler with NYTProf..
NOTE: The properties above _do not_ exist in the current code - you will drop requests in-flight if you shut handlers down!! (Patches to fix this should not be that hard, and would be welcome if anyone is interested)
If you're actually interested in using this in production, I'd recommend you look at the real mongrel2, and Plack::Handler::Mongrel2.
BUGS
Many, and varied. Please do not try to run this in production ;_)
Issues include:
- Large responses will use SEVERAL times the response length in RAM
- Requests never timeout
- App Handler crashes / restarts will lost in-flight requests.
- Quite probably leaks RAM.
-
This has not been tested, which means I quite probably got it wrong somewhere ;)
SEE ALSO
- Plack::App::Message::Passing.
- Plack::Handler::Message::Passing.
- mongrel2
- Message::Passing
- Message::Passing::ZeroMQ.
AUTHOR
Tomas Doran (t0m) <bobtfish@bobtfish.net>
COPYRIGHT
Copyright the above author.
LICENSE
GNU Affero General Public License, Version 3
If you feel this is too restrictive to be able to use this software, please talk to us as we'd be willing to consider re-licensing under less restrictive terms.