Ok, last post was a rant was about how Ruby sucks. This post is about how damned cool it is. Long story short, I needed to switch some code from a fork() model to multithreaded or select(). I really wasn’t excited about working with threads or Ruby’s rather coarse select() API. Then I found GServer.
Here’s the code:
class SVNServer < GServer def serve(socket) loop { proc_client(socket) } end end server = SVNServer.new(18500) server.start server.join
Basically, this code listens on tcp:18500 for connections, and then handles each connection over to the function proc_client(). All proc_client() needs to do when it’s done is call close() on the socket and return. Too simple.
One thing I don’t understand is why GServer isn’t covered in O’Reilly’s Ruby Cookbook. That’s a big WTF? in my book.
Actually, the Ruby Cookbook (1st ed, June 2006) does have an article on GServer. It’s article 14.14: Writing an Internet Server, pp 532-4.