そのため、実行時間の長い Ruby プロセスがあり、実行するように指示された内容に応じて、さまざまなことを実行します (バイナリ メッセージを使用する EventMachine TCP サーバー)。ここで、特定の人々に、Web インターフェイスを介して特定のプロセスを監視、変更、シャットダウンする機能を提供したいと考えています。そのためにSinatra.rbを使用する予定ですが、より良い代替手段を受け入れています。
私の最初のアイデアは、Sinatra Web インターフェイス (Sinatraに慣れていない人のために、 Rackに基づいています) を a 内Thread
で実行し、バックグラウンドで実行させることでした。
ただし、そのようにするとパフォーマンスに影響を与える可能性があると考えていたので、Ruby のIPC機能と代替実装 ( resque、メモリ共有、名前付きパイプなど) を調べることにしました。
私は resque のアイデアが本当に気に入りました (そして名前は本当に機知に富んでいます) が、それが私が必要としているものなのか、それともやり過ぎなのか完全にはわかりません。実際、SinatraとEventMachine を使用してどのように実装するのが最適なのかさえわかりません (ただし、resque の完全なドキュメントは読んでおらず、ざっと目を通し、例と使用例を読んだだけです)。
頭に浮かんだ別のアイデアは、シナトラを内部で使用することですがEventMachine::defer
、それは本質的に新しい を作成することと同じではありませんThread
か?
私はFiber
s を使って本格的なことをしたことがないので、その可能性を完全には知りませんが、頭に浮かんだことはありました。
では、これらの (またはより良い方法を提案する) プラクティスのどれが Ruby PCI に最適かを説明します。
ありがとう