Я пытаюсь запустить процесс, который обрабатывает данные отслеживания рейсов и активно превращает его в строки JSON (непрерывный цикл) вместе с сервером Sinatra, который отвечает на запросы GET этими строками JSON. Я пытаюсь использовать потоки, чтобы справиться с этим, но не имел успеха. Как я могу запустить эти два процесса бок о бок? Вот еще некоторые особенности:Запуск сервера и подпроцесса Sinatra асинхронно
У меня есть класс Aircraft
с массивом Aircraft
объектов, называемых Aircraft::All
. У меня есть метод, который постоянно обновляет этот массив, который я хочу запустить вместе с сервером Sinatra, который отвечает на запросы GET, списком самолетов в формате JSON.
Вот код:
# 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
Какая у вас конкретная проблема? Не могли бы вы предоставить какой-либо код? – sschmeck
только что отредактировал мой вопрос, чтобы включить код. Благодаря! –