4

I am currently working with a GWT app that has one large RPC service. It has over 100 methods, all of which do different things. What kind of performance benefit / hindrance would I get if I split this into multiple RPC services? I believe I'd have to make a new servlet for each one.

So my main questions are: Does GWT create a new RPC servlet for each running client? Would GWT have two servlets for one App if I have two RPC services? Would having two RPC services cause any performance issues. currently (10-15 concurrent users on one tomcat instance)

4

2 に答える 2

7

これを複数の RPC サービスに分割すると、どのようなパフォーマンス上の利点/障害が得られますか?

この点では何も変わらないと思います。

それぞれに新しいサーブレットを作成する必要があると思います。

必ずしも。RemoteServiceServlet複数のインターフェースを実装する単一のインターフェースを持つことができRemoteServiceます。クライアントが同じ URL を使用するには、すべてのインターフェイスで同じ設定を行う@RemoteServiceRelativePath必要がありますが、同じサーブレットを複数の異なる URL (servlet-mapping同じ を持つ複数servlet-name) にマップすることもできます。

GWT は実行中のクライアントごとに新しい RPC サーブレットを作成しますか?

GWT は新しい RPC サーブレットを作成しません。Web アプリを Tomcat でホストする場合、Tomcat はサーブレット インスタンス (通常はクラスごとに 1 つのインスタンス) を作成します。

于 2012-09-21T15:56:42.043 に答える
1

複数のRPCインターフェイスの1つの考えられる欠点:インターフェイス間に多くの共有モデルオブジェクトがある場合、GWTはFieldSerializersモデルオブジェクトごとに生成します-これらは正しく共有されます。ただし、各RPCインスタンスが必要なシリアライザーのみを参照するようにするために、TypeSerializerサービスプロキシごとにaが作成されます。それぞれ100個のモデルオブジェクトを使用する10個のサービスの場合、これはTypeSerializerそれぞれ100個の登録を持つ10秒になりFieldSerializerます(各シリアライザーへの3つのコンポーネント-シリアル化、インスタンス化、逆シリアル化)。

これらの共有モデルオブジェクトの重みで、少なくとも1つのアプリケーションのサイズがほぼ3倍になるのを見てきました。100を超えるRPCインターフェイスと、それらの間で共有される数千の可能なモデルオブジェクトです。すべてのモデルがすべてのインターフェースで使用されたわけではありませんが、この種の損傷を与えるには十分でした。これは、各インターフェイスペアを個別に維持し、他の各インターフェイスを拡張する1つのジャイアントペアを作成することで軽減されました。この方法GWT.createでは、その1つのタイプでのみ呼び出されるためTypeSerializer、数百ではなく1つのジャイアントのみが作成されます。

したがって、コンパイルされた出力サイズに注意し、SOYC(Story Of Your Compile)レポートを時々チェックして、すべてのスペースを占めるものを確認してください。

于 2012-09-22T22:35:05.330 に答える