J
Jeff Mitchell
I've been scoping out ruby for an upcoming server project.
For my purpose, performance will be a factor because the server will
be slending data in real-time much like a multipayer game server such
as Quake (as opposed to waiting for user input). Quake is an extreme
example, though -- it wouldn't be nearly that demanding.
I am very impressed with WEBrick, and this would be my primary choice
were it not for performance concerns.
How does WEBrick scale? Looking through the code, it appears that new
requests are handled by a ruby Thread -- as opposed to a native thread
or a fork. What happens with 40 threads, all transferring data and
doing stuff, all being handled by a single ruby process setjmp-ing and
longjmp-ing around? I'm guessing performance would be poor.
Next option is mod_ruby. Now I don't even understand how mod_ruby
works with Apache 2.0 since the ruby interpreter isn't thread-safe.
So that's all a mystery to me. Apache 1.3 + mod_perl is probably
well-tested and perhaps the most appropriate choice.
Are the above assumptions correct, and are there other options? One
more option which comes to mind is to simply write a forking ruby
server from scratch. This would mean more development time, but how
much more I'm not sure.
For my purpose, performance will be a factor because the server will
be slending data in real-time much like a multipayer game server such
as Quake (as opposed to waiting for user input). Quake is an extreme
example, though -- it wouldn't be nearly that demanding.
I am very impressed with WEBrick, and this would be my primary choice
were it not for performance concerns.
How does WEBrick scale? Looking through the code, it appears that new
requests are handled by a ruby Thread -- as opposed to a native thread
or a fork. What happens with 40 threads, all transferring data and
doing stuff, all being handled by a single ruby process setjmp-ing and
longjmp-ing around? I'm guessing performance would be poor.
Next option is mod_ruby. Now I don't even understand how mod_ruby
works with Apache 2.0 since the ruby interpreter isn't thread-safe.
So that's all a mystery to me. Apache 1.3 + mod_perl is probably
well-tested and perhaps the most appropriate choice.
Are the above assumptions correct, and are there other options? One
more option which comes to mind is to simply write a forking ruby
server from scratch. This would mean more development time, but how
much more I'm not sure.