隨着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
}
您仍然需要處理過程中的同一回調方法整個響應。
我意識到它可能不是最優雅的解決方案,但由於GWT RPC的工作方式,我認爲這是一條路。對於GWT,我認爲你通常應該嘗試編寫你的方法,以便批量不會成爲你需要考慮的問題。
Google的Ray Ryan做了一個關於Best Practices For Architecting Your GWT App的演講,他談到了使用命令模式的問題。發送碰巧經過RPC的異步命令是你可能想要的。一旦發送命令而不是RPC,對其進行批處理非常簡單。對於爲您實現此模式的庫,請參閱。我剛剛開始使用它,所以我不知道它是否會自動批量處理,但它全部是開放源代碼的許可證,所以如果不是這樣,您可以修復它。
您還可以使用GWTEventService如果您的應用程序適合彗星(服務器端推送)的域:
GWTEventService是基於事件的客戶端服務器通信的框架。它使用GWT-RPC和Comet/server-push技術。客戶端提供了一個高級API,有機會將偵聽器註冊到服務器,如GUI組件。可以將事件添加到服務器端的上下文/域中,並且客戶端上的偵聽器獲知有關傳入事件的信息。服務器端完全獨立於客戶端實現並且高度可配置。
因爲這個事件模型所提供的優點之一是:
活動被捆綁,以減少服務器調用
- 1. XSL:組合分組和呼叫模板
- 2. Freeswitch:mod_xml_curl和呼叫組
- 3. 呼叫數組值
- 4. 呼叫數組PHP
- 5. 如何分析與FB.API呼叫
- 6. 如何區分呼叫過濾器angularjs
- 7. 如何使用easyrtc實現組呼叫
- 8. MongoS呼叫分配分析
- 9. 如何將暫掛Twilio呼叫
- 10. 如何將呼叫時延的功能
- 11. 呼叫來電呼叫
- 12. 從分機發起呼叫
- 13. 分割故障呼叫printf
- 14. 呼叫在同一組織
- 15. 在Zend組織AJAX呼叫
- 16. Emberjs 1.13.0呼叫的組件
- 17. 星號中的自動呼叫分配或呼叫轉移
- 18. Mockito在一組其他呼叫之前/之後驗證呼叫
- 19. 如何取消呼叫
- 20. 如何「確保」AJAX呼叫?
- 21. 如何設置RESTful呼叫?
- 22. 如何強制呼叫addShutdownHook(...)
- 23. 如何檢測Selector.wakeup呼叫
- 24. 如何更正WinAPI呼叫?
- 25. Twilio,如何保持呼叫
- 26. 如何使用Reachibility呼叫
- 27. 如何攔截PDO呼叫?
- 28. 如何使用同步呼叫GWT或等待呼叫完成
- 29. 如何爲sinch javascript_api-to-PSTN呼叫設置呼叫者ID?
- 30. 如何進入呼叫和管理呼叫
您的解決方案不起作用,因爲在GWT的RPC是asynchronouse;他們在通話結束後立即返回; AsyncCallback處理程序負責處理值。 – 2008-11-09 18:00:54