0

我正在实现一个轮询服务,其界面如下所示。

poller = Poller.new(SomeClass)
poller.start
poller.stop

start方法应该不断地开始点击 http 请求并更新数据库中的内容。一旦started,该过程应该继续,直到它被明确地stoped。

我了解实现start需要在新进程中生成和运行。我不太确定如何在 Ruby 中实现这一点。我想要一个 ruby​​ 解决方案,而不是一个特定于 ruby​​ 框架的解决方案(不是 rails 插件或 sinatra 扩展。只是 ruby​​ gems)。我正在探索 eventmachine 和 starling-workling。我发现 eventmachine 太大而无法在短时间内理解,并且工作是一个插件而不是一个 gem。所以让它为 Ruby 应用程序工作是一件痛苦的事情。

我需要有关如何实现这一目标的指导。任何指针?代码示例会有所帮助。

编辑

Eventmachine 或 starling-workling 解决方案将优于线程/分叉。

4

3 回答 3

2

您不能使用以下示例Process#kill

class Poller
  def initialize klass
    @klass = klass
  end

  def start
    @pid = fork do
      Signal.trap("HUP") { puts "Ouch!"; exit }
      instance = @klass.new
      # ... do some work ...
    end
  end

  def stop
    Process.kill("HUP", @pid)
    Process.wait
  end
end
于 2010-08-12T05:33:49.773 回答
0

你考虑过守护进程宝石吗?

于 2010-08-12T08:02:53.550 回答
0
class Poller

    def start
       @thread = Thread.new { 
           #Your code here
       } 
    end


    def stop
       @thread.stop
    end

end
于 2010-08-12T05:33:22.450 回答