0

私のアプリケーションでは、クライアントは完了までに 1 ~ 2 分かかる複雑なタスクを要求できます。タスクは別のスレッドで実行され、リクエスト ハンドラは BlockingQueue を介してタスクと通信します。

現在、サーバーは、10 秒ごとにサーバーをポーリングする待機中のページにクライアントを即座にリダイレクトします。ただし、これは非常に非効率的であり、ポーリングの直後にタスクが終了した場合、クライアントはさらに 10 秒待たなければならない場合があります。

私がやりたいことは、タスクが完了するまで (待機中のページの) 要求ハンドラーをブロックしてから、ユーザーに応答を書き込むことです。私の観察によると、ほとんどのブラウザーは、サーバーが TCP ソケットを受け入れた場合 (そしておそらくヘッダーを書き戻した場合は??)、より長いタイムアウトを使用しますが、ブラウザーごとの正確なタイムアウトについてはわかりません。

ブラウザを2分間待たせるのは現実的ですか? 誰かがこれまたはより良いアイデアについて何か経験がありますか?

4

1 に答える 1

0

について考えましたかPush Notification

現在実施しているのは、応答のためにサーバーをポーリングするプル通知です。

プルサーバーでは、応答の準備ができたときに通知されます。これは、comet aka reverse ajax と呼ばれます。

この場合、ブラウザはこれ以上待つ必要はありません。他の作業に進み、応答の準備ができたら、それをユーザーに提示できます。

はい、ブラウザを待機させることができます。応答を書き込まないでください。

説明すると、作業を送信してから別のページにリダイレクトする代わりに、応答をコミットせずにサーバー処理を開始し、完了したら応答を送信します。また、UI に処理中のメッセージを表示して、送信されたタスクが処理中であることをユーザーが認識できるようにします。

IMHO私はこれが良いとは思わない.一度に1つのリクエストしか処理できないかのようにアプリケーションが見えるようになる.より少ない時間。

于 2012-05-01T14:54:58.733 に答える