ruby - 异步运行 Sinatra 服务器和子进程

标签 ruby multithreading http sinatra thin

我正在尝试运行一个进程来处理航类跟踪数据,并主动将其转换为 JSON 字符串(连续循环进程)以及一个 Sinatra 服务器,该服务器使用这些 JSON 字符串响应 GET 请求。我正在尝试使用线程来处理这个问题,但没有成功。如何并排运行这两个进程?以下是一些更具体的内容:

我有一个 Aircraft 类,其中包含一组名为 Aircraft::AllAircraft 对象。我有一个方法可以不断更新这个数组,我想与 Sinatra 服务器一起运行,该服务器使用 JSON 格式的飞机列表响应 GET 请求。

代码如下:

# starting the data stream from external process
IO.popen("./dump1090") do |data|
    block = ""
    # created sinatra server thread
    t1 = Thread.new do
        set :port, 8080
        set :environment, :production

        get '/aircrafts' do
            return_message = {}
            if !Aircraft::All.first.nil?
                return_message[:status] == 'success'
                return_message[:aircrafts] = message_maker
            else
                return_message[:status] = 'sorry - something went wrong'
                return_message[:aircrafts] = [] 
            end
            return_message.to_json
        end
    end
    # parsing the data in main thread -- the process 
    # I want to run alongside the server (parse_block updates Aircraft::All)
    while line = data.gets
        if line.to_s.split('').first == '*'
          parse_block(block)
          puts block
          Aircraft::All.reject { |aircraft| Time.now.to_f - aircraft.contact_time > 30 }
          block = ""  
        end
        block += line.to_s
  end
end

最佳答案

这里的主线程是 Sinatra 应用程序,附加线程加载数据,这对我来说更常见。

class Aircraft
  @aircrafts = {}

  def self.all
    @aircrafts
  end
end

Thread.new do
  no = 1
  while true
    Aircraft.all[no] = 'Boing'
    no += 1
    sleep(3)
  end
end

get '/aircrafts' do
  Aircraft.all.to_json
end

关于ruby - 异步运行 Sinatra 服务器和子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660779/

相关文章:

ruby - 如何使用 rails server 启动 resque 守护进程?

java - 无法取消 WorkerThread 。取消函数什么时候执行,仍然执行

http - 如何将 cookie 添加到 typescript 和 angular2 中的任何 http.get 请求?

python - 网站需要一段时间才能返回 500 Internal server error

java - Tomcat 连接超时是否会向 HTTP 客户端触发 500?

ruby - 我需要提高朴素贝叶斯文本分类的准确性

ruby-on-rails - Mongoid 随机文档

ruby-on-rails - Rails 导出 CSV 忽略空白

java - 并发周期任务运行

c# - 在 ContinueWith 中观察任务异常