Redirecting to ...

Rainbows! is like Unicorn, but Different…

While Rainbows! depends on Unicorn for its process/socket management, HTTP parser and configuration language; Rainbows! is more ambitious.

Architectural Diagrams

Unicorn uses a 1:1 mapping of processes to clients

unicorn master
\_ unicorn worker[0]
|  \_ client[0]
\_ unicorn worker[1]
|  \_ client[1]
\_ unicorn worker[2]
|  \_ client[2]
\_ unicorn worker[M]
   \_ client[M]

Rainbows! uses a M:N mapping of processes to clients

rainbows master
 \_ rainbows worker[0]
 |  \_ client[0,0]
 |  \_ client[0,1]
 |  \_ client[0,2]
 |  ...
 |  \_ client[0,N]
 \_ rainbows worker[1]
 |  \_ client[1,0]
 |  \_ client[1,1]
 |  \_ client[1,2]
 |  \_ client[1,3]
 |  ...
 |  \_ client[1,N]
 \_ rainbows worker[2]
 |  \_ client[2,0]
 |  \_ client[2,1]
 |  \_ client[2,2]
 |  ...
 |  \_ client[2,N]
 \_ rainbows worker[M]
    \_ client[M,0]
    \_ client[M,1]
    \_ client[M,2]
    \_ client[M,N]

In both cases, workers share common listen sockets with the master and pull connections off the listen queue only if the worker has resources available.

Differences from Unicorn

Similarities with Unicorn

While some similarities are obvious (we depend on and subclass off Unicorn code), some things are not:

Originally generated with the Darkfish Rdoc Generator 2, modified by wrongdoc.

We love to hear from you!
Email patches (with git send-email), pull requests, questions, bug reports, suggestions, etc. to us publically at
No subscription to the mailing list is necessary, just let us know to Cc: you if you're unsubscribed.
To subscribe, email with "subscribe" in the Subject and respond to the automated confirmation message.
Do not waste bandwidth with HTML, HTML mail will not be read.
Quote only parts you're responding to and do not top post.
For sensitive topics, email us privately at