2012-04-29 5 views
0

私は、サーバーが複数のクライアントに(毎秒)値を送信する必要があるシステムを開発しています。私の考えは、これを行うためにクライアントごとに1つのスレッドを実装することでした。GWT(serverside)マルチスレッド可能

thread.interrupt(); 
thread = null; 

しかし、私はちょうど一時停止/再開をすることはできません:私はちょうど使用スレッドを一時停止するには

Runnable tu = new TimeUpdater(market_id); 
Thread thread = ThreadManager.createBackgroundThread(tu); 
thread.start(); 

public class TimeUpdater implements Runnable{ 
boolean close = false; 
.. 
    public void run() { 
     while(!close){ 

     try { 
     //do something  
     Thread.sleep(1000); 
     }catch (InterruptedException e) { 
     } 

     } 
    } 
} 

を:私は、次の方法でスレッドを実装しましたのスレッドの仕事。 サーバ上でGWTを使用してマルチスレッドを使用する方がいいですか?

誤って編集した元の投稿です。 - Martin

+1

GWTのサーバー側は、矛盾(の一種)です。 gwtは、クライアント上で動作するjavascriptをコンパイルします。 –

+0

@ antony.trupeそれは間違っていないか、矛盾です、gwtにはリモート処理などを行うサーバー側のコンポーネントが含まれています –

答えて

0

まず、バックグラウンドスレッドでこれらのプロセスをバックエンドで実行する必要があります。これを行うには、タスクをバックエンドに送信しなければなりません。バックエンドにはすでに実行中のタスクがあるため、スレッドを追加するだけでアプリに待ち時間がかかります。メッセージをディスパッチするために実際にはスレッドは必要ありません。バックエンド要求は10分間続きます。また、スレッドは独自の要求で実行されます。静的RAMにスレッドのリストを格納してアクセスできるようになるかもしれませんが、より良い解決策は、インスタンスをオンラインにしてスリープさせるのではなく、メッセージが入ってくるときに配布することです。あなたのクライアントが毎秒サーバーにメッセージを送信する場合、そのRPCは、他のどのユーザーに通知する必要があるかをキー照会して、すぐにメッセージを送信できます。非同期データストアプロセスを使用すると、非常に高速になります。また、リクエスト時間を短縮したい場合は、rpcでメッセージの送信を開始させてから、サーブレットに応答を返させてから、応答が既にワイヤを下ってから非同期要求を確定することもできます。

私は、ThreadLocalマップとクリーンアップフィルタを使用して、このような後処理を行います。サーブレットはジョブを実行可能ファイルのリストにポストし、クリーンアップフィルタはジョブを実行します。非同期要求を直ちに開始する限り、クリーンアップフィルターがそれらに到達するまでに非同期要求が行われることがよくあります。

https://developers.google.com/appengine/docs/java/datastore/async

+0

私はjava.lang.Threadのカスタムのスーパーソースのサブクラスを使用して簡単にマルチスレッドを可能にするライブラリに取り組んでいますAppengineやJava環境では通常のスレッドと同様に動作し、gwtクライアントでは通常のスレッドとほとんど同じです。それがリリースされると、私はあなたへのリンクを投稿します。 – Ajax

1

申し訳ありませんが、google-app-engineではマルチスレッドが許可されていません。例えば、hereを参照してください。

関連する問題