Как группировать вызовы gwt-rpc? - PullRequest
7 голосов
/ 25 октября 2008

С DWR можно сгруппировать несколько вызовов службы в один HTTP-запрос:
функция пакетной обработки данных

Эта функция очень полезна для уменьшения задержки приложения ajax. Есть ли способ сделать нечто подобное с GWT / GWT-RPC?
Спасибо за вашу помощь

Ответы [ 4 ]

8 голосов
/ 09 октября 2009

Рэй Райан из Google сделал презентацию о Наилучших методах проектирования вашего GWT-приложения , где он рассказал об использовании шаблона команды. Отправка асинхронных команд через RPC - это то, что вы, вероятно, хотите. Как только вы отправляете команды вместо RPC, их очень легко пакетировать.

См. gwt-dispatch для библиотеки, которая реализует этот шаблон для вас. Я только начинаю его использовать, так что я не знаю, будет ли он пакетным автоматически, но это все с открытым исходным кодом с разрешительной лицензией, так что вы можете исправить это, если это не так.

1 голос
/ 11 июня 2010

Вы также можете использовать GWTEventService , если ваше приложение входит в домен Comet (на стороне сервера):

GWTEventService - основанная на событиях инфраструктура связи клиент-сервер. Он использует GWT-RPC и технику Comet / server-push. Клиентская сторона предлагает высокоуровневый API с возможностью регистрации слушателей на сервере, как в компоненте GUI. События могут быть добавлены в контекст / домен на стороне сервера, а слушатели на стороне клиента получают информацию о входящих событиях. Серверная часть полностью независима от клиентской реализации и легко настраивается.

Потому что одно из преимуществ этой модели события:

События объединяются для сокращения вызовов сервера

1 голос
/ 30 декабря 2008

Это хороший вопрос, но я не думаю, что есть простое решение.

Я полагаю, что вам придется создать отдельный метод, объединяющий ваши методы для достижения пакетной обработки аналогично 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
}

Вам, конечно, все равно придется обрабатывать весь ответ в том же методе обратного вызова.

Я понимаю, что это может быть не самое элегантное решение, но из-за того, как работает RPC GWT, я думаю, что это путь. С GWT я думаю, что вы, как правило, должны пытаться написать свои методы, чтобы пакетная обработка даже не была проблемой, которую вы должны рассмотреть.

1 голос
/ 25 октября 2008

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));
  }
}
...