📄 10 - implementing a distributed queue.rb
字号:
#!/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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -