Rails异步作业(快速查看和最小延迟)

时间:2011-03-17 08:59:17

标签: ruby-on-rails sinatra backgroundworker background-process

您好我开发了一个rails应用程序。

当一个控制器收到请求时,它将呈现客户端视图并通过TCP / IP向LED自动收报机显示发送另一个操作。但发送东西到LED自动收报机显示大约需要3秒钟。我可能会发送5-10个LED指示灯。

这将阻止客户端视图呈现。 (我可以使用多线程发送到每个LED自动收报机显示,但是当线程队列加入时仍然需要延迟3-5秒)

问题: 由于发送到LED失败,客户端视图无关紧要。

  1. 我能把它变成异步工作吗?怎么样?
  2. 我应该让Sinatra后台进程听取内容并通过sinatra应用程序发送给LED吗?
  3. 谢谢!

3 个答案:

答案 0 :(得分:1)

来自https://github.com/tra/spawn的spawn-plugin应该很好用,并且可以使用分叉(默认情况下),线程或产量。

我使用带有fork的spawn来执行长时间运行,相当繁重的任务,它就像魅力一样。一个简单的例子是:

spawn(:method => :fork) do
  do_led_stuff()
end

由于您不需要来自LED-ticker的任何反馈,您也不必等待()生成过程。

答案 1 :(得分:0)

您是否尝试过delayed_job(http://rubygems.org/gems/delayed_job)?我不知道它是否与Sinatra兼容,但也许你可以看看它。

答案 2 :(得分:0)

您可以使用Resque(https://github.com/defunkt/resque