ajax gwt gwt-rpc dwr

ajax - ¿Cómo agrupar llamadas gwt-rpc?



dwr (4)

Con DWR es posible agrupar varias llamadas de servicio en una única solicitud HTTP:
característica dwr batch

Esta característica es muy útil para reducir la latencia de una aplicación Ajax. ¿Hay alguna manera de hacer algo similar con GWT / GWT-RPC?
Gracias por tu ayuda


GWT no proporciona una solución de un solo paso para agrupar en lotes varios RPC arbitrarios. Sin embargo, tenga en cuenta que la serialización automática de GWT hace que sea bastante fácil escribir versiones en serie y en lote de cada uno de sus métodos RPC. Por ejemplo, supongamos que ha definido este RPC:

FooResponse callFoo(FooRequest request);

Es tan fácil escribir una versión "por lotes" del mismo RPC usted mismo:

ArrayList<FooResponse> batchCallFoo(ArrayList<FooRequest> requests) { ArrayList<FooResponse> responses = new ArrayList<FooResponse>(); for (FooRequest request : requests) { responses.add(callFoo(request)); } }


Es una buena pregunta, pero no creo que haya una solución fácil.

Creo que tendrás que crear un método diferente que agrupe tus métodos para lograr el procesamiento por lotes de forma similar a DWR.

Es decir, si tiene:

public int add(int x, int y); public int sub(int i, int j);

Deberías crear un nuevo método para combinarlos:

public Map<String, Integer> addAndSub(Map methodsAndArguments) { // Call add and sub methods with it''s arguments }

De todas formas, necesitará manejar toda la respuesta en el mismo método de devolución de llamada, por supuesto.

Me doy cuenta de que puede que no sea la solución más elegante, pero debido a la forma en que GWTs RPC funciona, creo que es el camino a seguir. Con GWT creo que generalmente debe intentar escribir sus métodos para que el procesamiento por lotes ni siquiera sea un problema que deba tener en cuenta.


Ray Ryan de Google hizo una presentación sobre las mejores prácticas para la arquitectura de su aplicación GWT , donde habló sobre el uso de un patrón de comando. El envío de comandos asincrónicos que pasen por encima de RPC es lo que probablemente desee. Una vez que envía comandos en lugar de RPC, es muy fácil agruparlos.

Ver gwt-dispatch para una biblioteca que implementa este patrón para usted. Estoy empezando a usarlo, así que no sé si se procesa automáticamente, pero es todo de código abierto con una licencia permisiva, por lo que puede solucionarlo si no lo hace.


También puede usar GWTEventService si su aplicación se ajusta al dominio de Comet (server-side-push):

GWTEventService es un marco de comunicación cliente-servidor basado en eventos. Utiliza GWT-RPC y la técnica Comet / server-push. El lado del cliente ofrece una API de alto nivel con oportunidades para registrar oyentes en el servidor, como un componente de la GUI. Los eventos se pueden agregar a un contexto / dominio en el lado del servidor y los oyentes del lado del cliente se informan sobre los eventos entrantes. El lado del servidor es completamente independiente de la implementación del cliente y es altamente configurable.

Porque una de las ventajas que ofrece este modelo de eventos es:

Los eventos se incluyen para reducir las llamadas al servidor