我正在尝试创建一个非常简单的restful服务器。当它收到请求时,我想在队列上创建一个新作业,当前线程向客户端返回响应时,该作业可由另一个线程处理。
我看着西纳特拉,但还没走得太远。
require 'sinatra'
require 'thread'
queue = Queue.new
set :port, 9090
get '/' do
queue << 'item'
length = queue.size
puts 'QUEUE LENGTH %d', length
'Message Received'
end
consumer = Thread.new do
5.times do |i|
value = queue.pop(true) rescue nil
puts "consumed #{value}"
end
end
consumer.join
在上面的例子中,我知道消费者线程只会运行几次(而不是应用程序的生命周期),但即使这样也不适用于我。
有更好的方法吗?