【发布时间】:2016-09-16 00:08:58
【问题描述】:
我有一个从串行端口读取数据的 ruby 脚本。 该数据可能是一些表示特定协议数据报的原始二进制字符串(我现在正在尝试 XBee API)。
这些数据必须在长时间的方法调用中进行处理,例如:
- 读取串口
- 解析二进制数据报
- 解析负载
- 转换值(即:来自时间戳、线性回归等的日期)
- 转换为 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,在这里可能很方便,并且可以在这个脚本之外启动另一个脚本。 (实际上我有一个连接到数据库的 sinatra api,还有一个 pubsub/websocket 等待在两者之间使用以通知新数据何时到来)
任何建议将不胜感激!
【问题讨论】:
标签: ruby methods nonblocking