2011-11-23 12 views
5

私はRubyで複数のEventMachinesを実行したいという状況があります。誰もこれを経験していますか? (もしそうでなければ、私はそれを自分自身で行うテストケースを書くかもしれません。複数のRuby EventMachinesを1つのプロセスで使用できますか?

私は自分自身で2つのスレッドをインスタンス化し、両方のスレッドでEventMachine.runを呼び出すので、実際には2つのリアクターループがあります。

なぜ私はEventMachineを使用するAMQP gemで非同期メッセージバスを書いているのですか?それは大丈夫ですが、私は二つのアプリケーション内で使用することができます別の、モジュラーコンポーネントことをしたい:独自のブロッキングGUIループを持っている

  • 1(つまり、EventMachineからダニを呼び出すことによってシミュレートすることができない - それは本当にブロックそれはCライブラリでやっているので、私はそれをハックすることはできません)。これは簡単です。EMを独自のスレッドで開始し、ループ間で着信メッセージをスレッドセーフな方法で共有します。
  • 自体は、私は潜在的にAMQPコードを共有することができ、反応器のループで実行されている別のアプリケーション(スレッドの安全性の問題のための素晴らしいです - 私は上記のアプリのためにとにかくそれらに対処する必要がありますが)。これは私の考えを持っているものです...上記のアプリケーションと2つの別々のEventMachinesを実行してメッセージバスコードを共有できますか?

誰もが考えていますか?

答えて

5

OKは、EMのドキュメントを掘り下げる、私が見EventMachine.runのための身体は、こので始まる:

240:  if reactor_running? 
241:  (b = blk || block) and b.call # next_tick(b) 
242:  else 
     ... start the reactor ... 

これは素晴らしいです。複数のスレッドでEventMachine.runを実行すると、すでに実行されている原子炉で、2番目のマシンの定義(実行されたブロック)をスケジュールするように見えます。

私はこのライブラリが大好きです。

2

あなたは自分に答えましたが、私は2セントを追加したいと思います。

# this will start the eventmachine reactor 
EM::run do 

    # do something 

    # this will do nothing and the block passed to it will 
    # just be executed directly 
    EM::run do 
    # do something else 
    end 

end 
-1

同じEMで複数のサーバーを実行している場合、多少の問題が発生する可能性があります。 多分、複数のプロセスでemを使用して同じものを無効にすることができますEM

関連する問題