2008-10-25 6 views

ответ

1

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)); 
    } 
} 
+0

Ваше решение не работает, потому что RPCs в GWT являются asynchronouse; они возвращаются сразу после вызова; обработчик AsyncCallback отвечает за обработку значения. – 2008-11-09 18:00:54

1

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

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

8

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

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

1

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

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

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

События в комплекте уменьшить сервер вызывает