Process-per-connection with drb

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?

Paul

On 1/30/07, Paul B. [email protected] 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

[email protected] wrote:

On 1/30/07, Paul B. [email protected] wrote:

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:

There’s also ara’s ruby queues thing.

Devin