我正在实现一个轮询器服务,其界面如下所示。
poller = Poller.new(SomeClass)
poller.start
poller.stop
start
方法应该不断启动命中http请求并更新数据库中的内容。一旦start
编辑,该过程应该继续,直到明确stop
为止。
我知道start
的实现需要在新进程中生成并运行。我不太确定如何在Ruby中实现这一点。我想要一个ruby解决方案而不是ruby框架特定的解决方案(不是rails插件或sinatra扩展。只是ruby gems)。我正在探索eventmachine和starling-workling。我发现eventmachine太大而无法在短时间内理解,而workling是一个插件而不是宝石。因此,为Ruby应用程序工作是一件痛苦的事。
我需要指导如何实现这一目标。有什么指针吗?代码示例将有所帮助。
修改
Eventmachine或starling-workling解决方案优于线程/分叉。
答案 0 :(得分: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
答案 1 :(得分:0)
class Poller
def start
@thread = Thread.new {
#Your code here
}
end
def stop
@thread.stop
end
end
答案 2 :(得分:0)
您是否考虑过Daemons宝石?