Non blocking merb actions
One of the most powerful features in
merb
is an action's ability to return a
proc
,
thus releasing the controller block and transferring control to the application server which will be able to handle requests in a parallel manner.
Consider the following controller.
class MyController < Application def hello render "hello" end def wait_and_hello sleep 10 render "hello" end def dont_wait_to_hello proc { sleep 10; p "hello" } end end
Start merb and access
http://localhost:4000/my_controller/hello
after visiting
http://localhost:4000/my_controller/wait_and_hello
.
Ten seconds will pass before
/my_controller/hello
is served. A request to
/my_controller/hello
will be served immediately regardless of whether a preceding request to
/my_controller/dont_wait_to_hello
has completed.