10 - implementing a distributed queue.rb

来自「O Reilly Ruby Cookbook source code」· RB 代码 · 共 61 行

RB
61
字号
#!/usr/bin/ruby# queue_server.rbrequire 'thread'     # For Ruby's thread-safe Queuerequire 'drb'$SAFE = 1            # Minimum acceptable paranoia level when sharing code!def run_queue(url='druby://127.0.0.1:61676')  queue = Queue.new  # Containing the jobs to be processed  # Start up DRb with URI and object to share  DRb.start_service(url, queue)  puts 'Listening for connection...'  while job = queue.deq    yield job  endend#---run_queue do |job|  case job['request']  when 'Report'    puts "Reporting for #{job['from']}...  Done."  when 'Process'    puts "Processing for #{job['from']}..."    sleep 3          # Simulate real work    puts 'Processing complete.'  endend#---$ ruby queue_server.rbListening for connection...Processing for Client 1...Processing complete.Processing for Client 2...Processing complete.Reporting for Client 1...  Done.Reporting for Client 2...  Done.Processing for Client 1...Processing complete.Reporting for Client 2...  Done....#---#!/usr/bin/ruby# queue_client.rbrequire 'thread'require 'drb'# Get a unique name for this clientNAME = ARGV.shift or raise "Usage:  #{File.basename($0)} CLIENT_NAME"DRb.start_servicequeue = DRbObject.new_with_uri("druby://127.0.0.1:61676")20.times do  queue.enq('request' => ['Report', 'Process'][rand(2)], 'from' => NAME)  sleep 1  # simulating network delaysend#---

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?