2011-01-31 15 views
1

私は着信SIP音声通話を受け入れ、同じホストマシン上のTomcatインスタンス上で実行されているJavaアプリケーションでWebサービスをポーリングして、着信音声要求(たとえば、音声を再生する別のチャンネルからプロンプトを出したり、いくつかの数字を集める)。これらの音声要求は、別個のWSインターフェイスを介して受信され、収集されるVXMLセッション用にキャッシュされます。音声要求は、呼び出しが受け入れられた後、0.5秒から30秒までの任意の場所で受信され得る。Tomcatのスレッドスリープ

論理的には、VXMLセッションは新しい要求を定期的にポーリングし、TomcatのJavaアプリケーションは要求が受信されたかどうかを示す非ブロック応答を返します。ただし、VXMLインタープリタからのWebサービスコールを作成するCPUコストが非常に高いため、大量の同時呼び出しでこれを定期的に繰り返すことは、システム容量に顕著に影響します。

音声サービス要求がキャッシュに到着するまで、WebアプリケーションがVXMLアプリケーションからのポーリングをブロックするようにするのが望ましいアプローチです(タイムアウト、たとえば5または10秒)。しかし、私は、サーブレットスレッドでのThread.sleepの使用は長い間悪い考えであることを理解しているので、これを達成するための代替手段を探しています。

このアプリケーションでは、サーバー上で大量の同時セッションをサポートする必要があります(計画されたハードウェアで最大1000のVXMLセッションが必要です)。したがって、Tomcatのスレッド数を増やすだけでは問題ありません。

他のリクエストのためにサーブレットスレッドを解放している間、Tomcatに要求をある程度時間を置くことができる方法はありますか?偶然にも、Tom.sleepを使うだけでTomcatはこれを行うのに十分スマートですか? :-)

おかげで、Javaで FB

答えて

1

長時間実行要求と、ノンブロッキングI/Oは、一般的に "彗星" と呼ばれています。 Tomcat 6はこれを独自の方法でサポートしており、Servlet 3.0仕様に組み込まれています。

両方を実行する方法については、this articleを参照してください。

+0

ありがとうSkaffman。私はAjaxで使われていたような長い世論調査の概念を知っていましたが、特定の用語があるか、TomcatやJettyに明示的なサポートがあるかどうかはわかりませんでした。私は必要なもののように見えます! –

関連する問題