У меня есть скрипт ruby, который считывает данные из последовательного порта. Эти данные могут представлять собой некоторую необработанную двоичную строку, которая представляет собой конкретную дейтаграмму протокола (я пытаюсь использовать XBee API, как сейчас).Неблокирующая обработка данных ruby или вызов метода
эти данных должны быть обработаны в долгосрочной перспективе вызовов методов, что-то вроде:
- Читать серийное
- Анализировать двоичную дейтаграмму
- Анализировать полезную нагрузку
- Transform значения (например: даты от временные метки, линейные регрессии и т. д.)
- Преобразование в JSON
- Ввод в базу данных
Частота получения данных быстрее, чем моя способность обрабатывать. мне нужно сделать что-то вроде этого:
loop do
begin
res = @xbee.getresponse
return_super_fast_and_work_that_in_the_background res
rescue => e
puts e #append to some log here or something
end
end
Итак, что я могу себе представить, что я, возможно, потребуется собрать приличное количество этих дейтаграмм, а затем обработать их все в партии.
Но я не могу себе представить, как реализовать такой метод:
#return_super_fast_and_work_in_the_background()
Все примеры я могу найти связаны с неблокируемому IO или сетевых задач и Eventmachine.
У меня есть redis вокруг, может быть удобно здесь, и вы можете запустить другие скрипты в сторону этого. (на самом деле у меня есть synatra api, подключенный к базе данных, и pubsub/websocket, ожидающий, что будет использоваться между ними, чтобы уведомить, когда появятся новые данные)
Любые предложения будут высоко оценены!