0

インターフェイスが次のようなポーラー サービスを実装しています。

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

このstartメソッドは、継続的に http リクエストのヒットを開始し、データベース内のものを更新することになっています。ed が実行されるstartと、明示的に ed が実行されるまでプロセスが続行されstopます。

startの実装は、新しいプロセスで生成して実行する必要があることを理解しています。Rubyでそれを達成する方法がよくわかりません。Ruby フレームワーク固有のソリューションではなく、Ruby ソリューションが必要です (Rails プラグインや Sinatra 拡張機能ではなく、Ruby gem のみ)。私は 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 に答える