2011-06-14 14 views
0

私は、「可能な」長期実行タスクを実行するアクションを持っています。可能なのは、リモートサーバーへの要求とネットワーク待ち時間のために、ユーザーインターフェイスをブロックしてユーザーに小さな遅延を与える可能性があります。レールでの非同期タスクのユーザーフィードバック

私の質問は、「長いタスクをバックグラウンドで送信する方法」とは関係ありませんが、通知はユーザーにプッシュする方法です。私のアイデアは、ユーザーがボタンをクリックし、バックグラウンドでタスクを起動し、Webインターフェイスがブロックされていないこと、そしてユーザーが望むものを何でもでき、タスクが完了したときにフラッシュメッセージを受け取りました。 AJAXを使ってサーバーをポーリングすると、たとえば自分のタスクのステータスを示す特定のアクションを実行できますが、イベントベースのパターンはありますか?概念証明やプロトタイプを使った答えのための栄誉。

+0

あなたは[EventMachine](https://github.com/eventmachine/eventmachine)を認識していますか? – coreyward

+0

私は確かですが、コントローラとどのように統合するのですか?私はコントローラでEM.runを簡単に起動できません。 –

+0

あなたはパターンを求めました。 EventMachineが使用するパターン(Reactorパターンに非常に近いパターン)は、使用したいパターンです。これのために設計されています。 Railsではこれを使用しません。あなたはRailsに加えてそれを使用します。 – coreyward

答えて

1

ここに概念の証明はありませんが、spawnやdelayed_jobのようなものを使用してRailsタスクを起動し、インターフェースのブロックを解除し、node.jsなどでクライアントに返信することができます。ただし、何をしたいかによっては、サーバーソフトウェアを増設するよりも長いポーリングが実用的かもしれません。