From: brabuhr@... Date: 2007-01-31T13:17:02+09:00 Subject: Re: process-per-connection with drb On 1/30/07, Paul Brannan wrote: > Reading through drb.rb, I see that drb uses a thread-per-connection > model. I have some C++ extensions that I want to provide access to via > a drb server. Unfortunately, these extensions are not safe to use with > ruby's green threads, and it is impossible to make them thread-safe, > given the mechanism ruby uses to switch thread contexts. > > I want to instead use a process-per-connection model and have a pool of > processes waiting to handle requests. How should I go about > implementing this? Well, I will make no comment about how you "should" go about this, but I hacked this together: See: http://raa.ruby-lang.org/project/slave/ # slaved.rb: require 'drb' require 'slave' class SlaveDaemon attr_reader :slave def initialize klass puts "Initializing a new slave of class #{klass}." @slave = Slave::new{ eval "#{klass}.new" } end end DRb.start_service('druby://localhost:9000', SlaveDaemon) DRb.thread.join #client.rb: require 'drb' DRb.start_service() SlaveDaemon = DRbObject.new(nil, 'druby://localhost:9000') s = SlaveDaemon.new(Array) a = s.slave.object a[1] = 1 a[2] = 2 a[4] = 4 a.each do |i| p i end > ruby slaved.rb Initializing a new slave of class Array. > ruby client.rb nil 1 2 nil 4