web-dev-qa-db-ja.com

GWTのスレッド化(クライアント)

私の理解では、GWTアプリケーションのクライアント側全体がビルド時にJavaScriptに変換されるため、この質問はJavaScriptとGWTが提供する可能性の両方に関連していると思います。

私のGWTアプリケーションで開始する必要があるプロセスが数十あります。各プロセスは、継続的にサーバーを呼び出します。 GWTはスレッド化をサポートしていますか? GWTクライアント側はスレッド化をサポートしていますか?

編集:

これは link の状態です:

No JavaScript knowledge required If you’re just a user of the framework, 
which I am for the matter of discussion, you do not need to know JavaScript 
in order to write dynamic content, be it client-side such as rolling frames, 
docking panels or scheduled “multi-threading” tasks, or server-side calls 
using XMLHttpRequests (aka AJAX). 

またはスケジュールされた「マルチスレッド」タスク、これはどういう意味ですか?

48
Federer

JavaScriptはマルチスレッドをサポートしていません。ただし、GWTにはスレッドを「シミュレート」するクラスがあります。これは実際のマルチスレッドではありませんが、ほとんどの場合、必要なことを実行します:_com.google.gwt.core.client.Scheduler.ScheduledCommand_。この手法は、指定された時間が経過した後にメソッドを実行するタイマークラスに基づいています。

たとえば、次のコードを独自のコードに配置すると、scheduleDeferredメソッドが直接返され、コマンドの後でコードが続行しますが、execute()メソッドはタイマーを使用して実行されます。

_Scheduler.get().scheduleDeferred(new ScheduledCommand() {
   public void execute() {
      .. code here is executed using the timer technique.
   }
});
_

繰り返しコマンドRepeatingCommandを作成できます。これは、コマンドを複数回実行するために使用できます。実行メソッドがfalseを返すまでコマンドを実行するScheduler.get().scheduleIncremental()で開始します。これを使用してタスクをサブタスクに分割し、「スレッド化」動作を向上させることができます。 Schedulerは、スケジュールされたコマンドを異なる方法で開始するいくつかの追加メソッドをサポートしています。詳細は JavaDoc を参照してください。

Editedおよび非推奨のDeferredCommandの代わりに新しいGWTクラスで更新されました。

36

HTML5の一部としてWebワーカーでの作業がありますが、すべてのブラウザー(特にInternet Explorer)では実装されていません。可能な場合はこれらの機能を使用できますが、JavaScriptプログラミングモデルを確認する必要があります。

JavaScriptは一般に非同期で動作します。リクエストは発行され、ある時点でそれらの回答はイベントとして受信されます。多数の保留中のリクエストを同時に処理できます。ただし、システムを少し再設計する必要があります。

4
Paul de Vrieze

新しい方法は Scheduler を使用することです

1
Kurru

JavaScriptはマルチスレッドをサポートしていないため、GWTはクライアント側ですでに利用可能な機能しか使用できないため、GWTが何を行う場合でも、サーバー側でのみマルチスレッドを実行する必要があります。

0