DWR を使用すると、複数のサービス呼び出しを 1 つの HTTP リクエストにまとめることができます:
dwr バッチ機能
この機能は、ajax アプリケーションの待ち時間を短縮するのに非常に役立ちます。GWT / GWT-RPC で同様のことを行う方法はありますか?
ご協力いただきありがとうございます
4 に答える
GoogleのRayRyanは、GWTアプリを設計するためのベストプラクティスについてプレゼンテーションを行い、コマンドパターンの使用について話しました。たまたまRPCを経由する非同期コマンドを送信することは、おそらくあなたが望むことです。RPCの代わりにコマンドを送信すると、それらをバッチ処理するのは非常に簡単です。
このパターンを実装するライブラリについては、gwt-dispatchを参照してください。使い始めたばかりなので、自動的にバッチ処理されるかどうかはわかりませんが、すべてパーミッシブライセンスを備えたオープンソースなので、そうでない場合は修正できます。
良い質問ですが、簡単な解決策はないと思います。
DWR と同様の方法でバッチ処理を実現するには、メソッドをグループ化する別のメソッドを作成する必要があると思います。
つまり、次の場合:
public int add(int x, int y);
public int sub(int i, int j);
それらを結合する新しいメソッドを作成します。
public Map<String, Integer> addAndSub(Map methodsAndArguments) {
// Call add and sub methods with it's arguments
}
もちろん、同じコールバック メソッドで応答全体を処理する必要があります。
私はそれが最も洗練された解決策ではないかもしれないことを理解していますが、GWT RPC の動作方法により、それが進むべき道だと思います。GWT では、一般に、バッチ処理が考慮すべき問題にならないように、メソッドを作成するように努めるべきだと思います。
GWT は、複数の任意の RPC をバッチ処理するためのワンステップ ソリューションを提供しません。ただし、GWT の自動シリアル化により、各 RPC メソッドのシリアル バージョンとバッチ バージョンの両方を非常に簡単に作成できることに注意してください。たとえば、次の RPC を定義したとします。
FooResponse callFoo(FooRequest request);
同じ RPC の「バッチ」バージョンを自分で作成するのは、このように簡単です。
ArrayList<FooResponse> batchCallFoo(ArrayList<FooRequest> requests) {
ArrayList<FooResponse> responses = new ArrayList<FooResponse>();
for (FooRequest request : requests) {
responses.add(callFoo(request));
}
}
アプリケーションが Comet のドメインに適合する場合 (サーバー側プッシュ)、GWTEventServiceを使用することもできます。
GWTEventService は、イベント ベースのクライアント サーバー通信フレームワークです。GWT-RPC とコメット/サーバー プッシュ手法を使用します。クライアント側は、GUI コンポーネントのようにリスナーをサーバーに登録する機会を備えた高レベル API を提供します。イベントはサーバー側のコンテキスト/ドメインに追加でき、クライアント側のリスナーは着信イベントについて通知されます。サーバー側はクライアントの実装から完全に独立しており、高度な構成が可能です。
このイベント モデルによって提供される利点の 1 つは、次のとおりです。
サーバー呼び出しを減らすためにイベントがバンドルされています