我正在尝试创建一个非常简单的宁静服务器。当它收到请求时,我想在队列上创建一个可以由另一个线程处理的新作业,同时当前线程向客户端返回响应。
我看着 Sinatra,但还没有走得太远。
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
在上面的示例中,我知道消费者线程只会运行几次(与应用程序的生命周期相反),但即使这对我也不起作用。
有更好的方法吗?