2008-10-25 15 views
7

डीडब्ल्यूआर के साथ यह एक साथ समूह के लिए संभव है कई सेवा एक एकल HTTP अनुरोध में कॉल:
dwr batch feature

यह सुविधा बहुत उपयोगी है एक ajax आवेदन की प्रतीक्षा अवधि कम करने। क्या जीडब्ल्यूटी/जीडब्ल्यूटी-आरपीसी के साथ कुछ ऐसा करने का कोई तरीका है?
आपकी मदद के लिए धन्यवादgwt-rpc कॉल कैसे समूह करें?

उत्तर

1

जीडब्ल्यूटी कई मनमानी आरपीसी बैचिंग के लिए एक-चरण समाधान प्रदान नहीं करता है। हालांकि, ध्यान रखें कि जीडब्ल्यूटी के स्वचालित क्रमिकरण ने आपके प्रत्येक आरपीसी तरीकों के सीरियल और बैच किए गए संस्करणों को लिखना काफी आसान बना दिया है। उदाहरण के लिए, मान लीजिए आप इस आरपीसी परिभाषित किया है:

FooResponse callFoo(FooRequest request); 

यह इस आसान एक ही आरपीसी अपने आप को एक "बैच" संस्करण लिखने के लिए:

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

आपका समाधान काम नहीं करता क्योंकि GWT में RPC शुरू asynchronouse कर रहे हैं; वे कॉल के तुरंत बाद वापस आते हैं; AsyncCallback हैंडलर मूल्य को संभालने के लिए ज़िम्मेदार है। –

+0

जब तक उसका बैचकॉलफू सर्वर-साइड कार्यान्वयन नहीं होता है, तो इस मामले में, यह काम करेगा, लेकिन क्लाइंट-साइड कॉल के रूप में, उसके बैच कार्यान्वयन के कुछ भी नहीं करता है - यह बार-बार कॉलफू को कॉल करता है, जो "बैच" कॉल का एंटीथेसिस है । –

1

यह एक अच्छा सवाल है, लेकिन मुझे नहीं पता लगता है कि एक आसान समाधान है।

मुझे विश्वास है कि आपको एक अलग विधि बनाना होगा जो डीडब्लूआर के समान तरीके से बैचिंग प्राप्त करने के लिए आपके तरीकों को एक साथ जोड़ देगा।

Ie अगर आपके पास:

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 
} 

तुम अब भी निश्चित रूप से एक ही कॉलबैक विधि में पूरे प्रतिक्रिया संभाल करने की आवश्यकता होगी ।

मुझे एहसास है कि यह सबसे सुरुचिपूर्ण समाधान नहीं हो सकता है, लेकिन जिस तरह से जीडब्ल्यूटीएस आरपीसी काम करता है, मुझे लगता है कि यह जाने का तरीका है। जीडब्ल्यूटी के साथ मुझे लगता है कि आपको आम तौर पर अपनी विधियों को लिखने की कोशिश करनी चाहिए ताकि बैचिंग भी ऐसी कोई समस्या न हो जिस पर आपको विचार करने की आवश्यकता हो।

8

Google के रे रयान ने Best Practices For Architecting Your GWT App के बारे में एक प्रस्तुति दी, जहां उन्होंने कमांड पैटर्न का उपयोग करने के बारे में बात की। आरपीसी पर जाने के लिए होने वाले एसिंक्रोनस कमांड भेजना जो आप शायद चाहते हैं। एक बार जब आप आरपीसी के बजाय कमांड भेज रहे हैं, तो उन्हें बैच करना बहुत आसान है।

एक पुस्तकालय के लिए gwt-dispatch देखें जो आपके लिए इस पैटर्न को लागू करता है। मैं बस इसका उपयोग करना शुरू कर रहा हूं, इसलिए मुझे नहीं पता कि यह स्वचालित रूप से बैच करता है, लेकिन यह एक अनुमोदित लाइसेंस के साथ सभी खुले स्रोत हैं, इसलिए यदि आप ऐसा नहीं करते हैं तो आप इसे ठीक कर सकते हैं।

1

तुम भी GWTEventService उपयोग कर सकते हैं, तो आपके आवेदन धूमकेतु (सर्वर साइड-धक्का) के डोमेन में फिट बैठता है:

GWTEventService एक घटना आधारित क्लाइंट-सर्वर संचार रूपरेखा है। यह जीडब्ल्यूटी-आरपीसी और धूमकेतु/सर्वर-पुश तकनीक का उपयोग करता है। क्लाइंट साइड एक उच्च स्तरीय एपीआई प्रदान करता है जिसमें श्रोताओं को सर्वर पर जीयूआई घटक की तरह पंजीकरण करने के अवसर मिलते हैं। घटनाओं को सर्वर पक्ष पर संदर्भ/डोमेन में जोड़ा जा सकता है और क्लाइंट पक्ष के श्रोताओं को आने वाली घटनाओं के बारे में सूचित किया जा सकता है। सर्वर पक्ष क्लाइंट कार्यान्वयन से पूरी तरह से स्वतंत्र है और अत्यधिक विन्यास योग्य है।

क्योंकि इस घटना के मॉडल के आधार पर की पेशकश की लाभ में से एक है:

घटनाक्रम सर्वर कॉल को कम करने के इकट्ठा किए गए

संबंधित मुद्दे