質問: サーバで処理が完了したらブラウザへ「完了したよ」というメッセージを送りたいです。 現時点では Node.js + Socket.io で考えていますが他に良い方法や問題点があれば教えて頂きたいです。 概要は以下の通りです。 1. ユーザがメールアドレスを入力して動画ファイルをアップロード 2. サーバ側で非同期でffmpegを使って加工(数秒〜数分) 3. 完了したらメールで通知 4. このときにアップロード後の画面を開いたままのユーザにはサーバから「完了したよ」とHTMLを書き換えたい 5. サーバサイドのジョブ管理はffmpegのシェルスクリプトとRedis pub/subでNode.jsと連携します。 6. アップロードから加工の部分は非同期です。アップロード完了したらすぐ「処理中」の画面を返します。
回答: よく練られていて流石ですね。 Ajax通信で検知する方法も考えてみました。 > > 1. ユーザがメールアドレスを入力して動画ファイルをアップロード > > > 現在時刻(ミリ秒含む)+メールアドレスでIDとする、 アップロードしたリクエストの送信結果にこのIDを含めて返す シェルスクリプト実行→Redisに格納というフローにこのIDを含めます。 確認のフローは二択になるでしょう。 * 3~5秒に1度、発行されたIDでmpegできたか否かを確認する目的のAjax通信を行う * 発行されたIDでAjax通信を発行、サーバー側はリクエストを保留にし続けて、pub/subの通知を持って完了報告を行う 因みに後者はGoogleがWebSocketの搭載されていないブラウザで同じことを実現するための手段として使っています。