2

私は以前、新しいチャットメッセージをチェックするPHPとjQueryで長いポーリングを行った経験があります。

アイデアは、新しいメッセージがあるかどうかをチェックするwhileループを作成し、ある場合は新しいメッセージを返し、ない場合は5秒間スリープして、もう一度チェックすることでした。

javastruts2フレームワークを使用して同じことをしたいと思います。whileループを持ち、同じことを行い、待機にThread.sleep()を使用するアクションクラスを作成しました。

ただし、CPU使用率が非常に高くなります。私はそれを正しくやっていますか?クライアント側のポーリングを使用する単純なアプローチを使用してサンプルコードを再作成したため、現在サンプルコードを保存していないことをお詫び申し上げます。

感謝します。

4

2 に答える 2

1

BlockingQueueを使用してみませんか?なぜこれがjQueryと長いポーリングと関係があるのか​​理解できません。これはサーバー内部の設計上の問題です。

于 2013-04-25T09:18:09.673 に答える
0

(タイトルがjQueryと言っているにもかかわらず)Javaでこれを実行したい場合(「javastruts2フレームワークを使用して同じことを実行したい」)、whileループは適切なソリューションではありません

代わりに、java.util.Timer(/ TimerTask)を使用する必要があります。

Struts2では、リクエストごとに1つのアクションがインスタンス化されるため、アクションでタイマーを作成し、100人の同時ユーザーがいる場合、100個のタイマーが実行されていることに注意してください。EJBから使用することをお勧めします。

このSOの答えも見てください:

1)JavaでのTimer&TimerTaskとスレッド+スリープの比較

2)Javaでタイマーを設定する方法

およびJavadocで:JavaEE5 チュートリアル-タイマーサービスの使用

私の2セント...

于 2012-12-20T13:37:10.943 に答える