С DWR можно сгруппировать несколько сервисных вызовов в одного запроса HTTP:
dwr batch feature
Эта функция очень полезна для уменьшения задержки в AJAX приложения. Есть ли способ сделать что-то подобное с GWT/GWT-RPC?
Спасибо за помощьКак группировать вызовы gwt-rpc?
ответ
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));
}
}
Это хороший вопрос, но я не подумайте, что есть простое решение.
Я считаю, что вам нужно будет создать отдельный метод, который объединяет ваши методы для достижения дозирования аналогичным образом в 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
}
Вы все еще нужно будет обрабатывать весь ответ в тот же метод обратного вызова, конечно, ,
Я понимаю, что это может быть не самое изящное решение, но из-за того, как работает GWTs RPC, я думаю, что это путь. С GWT я думаю, что вы, как правило, пытаетесь написать свои методы, чтобы пакетная обработка даже не была проблемой, которую вы должны учитывать.
Рей Райан Google сделал презентацию о Best Practices For Architecting Your GWT App, где он рассказал об использовании шаблона команды. Отправка асинхронных команд, которые происходят с RPC, - это то, что вы, вероятно, захотите. Как только вы отправляете команды вместо RPC, их очень легко выполнить.
См. gwt-dispatch для библиотеки, которая реализует этот шаблон для вас. Я только начинаю использовать его, поэтому я не знаю, будет ли он автоматически загружаться, но все это с открытым исходным кодом с разрешительной лицензией, поэтому вы можете исправить это, если это не так.
Вы также можете использовать GWTEventService, если ваше приложение вписывается в область Comet (на стороне сервера-нажимной):
GWTEventService является основой связи клиент-сервер на основе событий. Он использует GWT-RPC и технологию Comet/Server-push. Клиентская сторона предлагает API высокого уровня с возможностью регистрации слушателей на сервере подобно компоненту GUI. События могут быть добавлены в контекст/домен на стороне сервера, а слушатели на стороне клиента получают информацию о входящих событиях. Серверная сторона полностью независима от реализации клиента и имеет высокую степень конфигурирования.
Потому что один из преимуществ этой модели событий является:
События в комплекте уменьшить сервер вызывает
Ваше решение не работает, потому что RPCs в GWT являются asynchronouse; они возвращаются сразу после вызова; обработчик AsyncCallback отвечает за обработку значения. – 2008-11-09 18:00:54