我目前正在使用一个具有一个大型RPC服务的GWT应用程序。它有100多个方法,所有这些方法都做了不同的事情。如果我将其拆分成多个RPC服务,我将获得什么样的性能优势/障碍?我相信我必须为每个新的servlet创建一个新的servlet。
因此,我的主要问题是: GWT是否为每个运行的客户机创建一个新的RPC servlet?如果我有两个RPC服务,GWT会为一个应用程序提供两个servlet吗?拥有两个RPC服务是否会导致任何性能问题。当前(一个tomcat实例有10-15个并发用户)
发布于 2012-09-21 23:56:42
如果我将其拆分成多个RPC服务,我将获得什么样的性能优势/障碍?
我相信这在这方面不会有任何改变。
我想我必须为每一个都创建一个新的servlet。
不一定。您可以让单个RemoteServiceServlet实现多个RemoteService接口。您必须在所有接口上设置相同的@RemoteServiceRelativePath,以便客户机使用相同的servlet-mapping,但也可以将相同的servlet映射到几个不同的servlet-name(具有相同URL的多个URL)。
GWT是否为每个正在运行的客户机创建新的RPC servlet?
GWT不会创建新的RPC servlet,如果您在Tomcat中托管web应用程序,那么Tomcat odes将创建servlet实例(通常每个类一个实例)。
发布于 2012-09-23 06:35:05
多个RPC接口的一个可能的缺点是:如果接口之间有许多共享的模型对象,GWT将为每个模型对象生成FieldSerializers -这些对象将被正确共享。但是,为了确保每个RPC实例只引用它需要的序列化程序,将为每个服务代理创建一个TypeSerializer。如果有10个服务,每个服务使用100个模型对象,这将导致10个TypeSerializer,每个服务有100个FieldSerializer注册(每个序列化程序有三个组件-序列化、实例化、反序列化)。
我见过至少有一个应用程序在这些共享模型对象的重压下几乎三倍大-超过100个RPC接口,以及它们之间共享的数千个可能的模型对象。并不是每个界面都使用了每个模型,但足以造成这种破坏。通过单独维护每个接口对,并创建一个巨大的接口对来扩展其他每个接口,可以缓解这种情况-这样,只在一种类型上调用GWT.create,所以只会创建一个巨大的TypeSerializer,而不是数百个。
因此,请密切关注编译后的输出大小,并偶尔查看SOYC (编译的故事)报告,看看是什么占用了所有空间。
https://stackoverflow.com/questions/12533839
复制相似问题