Hi, I plan to build a SIP TCP server (no UDP) based on Unicorn/Rainbows! HTTP server. The main different between a SIP server and HTTP server are:
- SIP uses persistent TCP connections, so I should use Rainbows!. - For a SIP server it's not valid a simple request-response model. Different workers could handle SIP messages (requests and responses) belonging to the same SIP session so I need a shared memory between all the workers. Another option is using EventMachine, perhaps more suitable for this purpose by design as it uses a single Ruby process so sharing memory is not a problem. In the other side using a single process in a multicore server is a pain. I would like to use Unicorn/Rainbows as I love its design: by far it's the more reliable and efficient Ruby HTTP server and it takes advantages of Unix's features. I don't want to use a DB server neither MemCache as "shared memory" as it would be too slow. Is there any way to share RAM memory between different Unicorn/Rainbows! workers in a *safe* way? I could create a Hash or Array of SIP sessions into the master process so all the workers reuse it, but I don't think it would be safe to access/write into it from different Ruby processes. For that I would also need a semaphore system (perhaps again a shared variable between all workers in order to lock the shared Array/Hash when a worker writes into it). Any tip about it? suggstions? Thanks a lot. -- Iñaki Baz Castillo <[email protected]> _______________________________________________ Unicorn mailing list - [email protected] http://rubyforge.org/mailman/listinfo/mongrel-unicorn Do not quote signatures (like this one) or top post when replying
