2011-05-26 16 views
27

Google वेब टूलकिट्स (जीडब्ल्यूटी) आरपीसी कॉल के लिए डेटा प्रारूप कैसे दिखता है और IsSerializable ऑब्जेक्ट्स कैसे प्रसारित होते हैं। मुझे पता है कि जावा सीरियलज़ेबल किसी प्रकार का बाइनरी प्रारूप प्रसारित करता है, लेकिन क्या यह जीडब्ल्यूटी के साथ भी मामला है? (चूंकि मुझे यह जावास्क्रिप्ट के साथ संगत होने की उम्मीद नहीं है, या कम से कम कुछ अतिरिक्त पार्सिंग की आवश्यकता है)।जीडब्ल्यूटी आरपीसी डेटा प्रारूप

उत्तर

48

संपादित करें: ब्रायन Slesinsky बस प्रोटोकॉल दस्तावेज (कोड रिवर्स इंजीनियरिंग द्वारा): https://docs.google.com/document/d/1eG0YocsYYbNAtivkLtcaiEE5IOF5u4LUol8-LL0TIKU/edit

पहले, GWT-RPC प्रोटोकॉल असममित है ताकि यह हमेशा क्लाइंट साइड के अनुरूप होता है: तेजी से deserialize करने के लिए सर्वर से कुछ आ रहा है, और इसे भेजने के लिए कुछ क्रमबद्ध करने के लिए तेज़ है।

यह स्पष्ट रूप से द्विआधारी नहीं है, जैसा कि आपको संदेह है, लेकिन टेक्स्ट-आधारित है। क्लाइंट-टू-सर्वर प्रोटोकॉल पाइप-डिलीमिट किया गया है जबकि सर्वर-टू-क्लाइंट JSON पर आधारित है (//OK या //EX उपसर्ग के साथ यह बताने के लिए कि अनुरोध सफल हुआ या विफल हुआ)। दोनों serializable वर्गों के सामान्य ज्ञान serialize/deserialize करने के लिए उपयोग करें; उदाहरण के लिए, दोनों पक्षों को पता है कि कक्षा एक्स में दो फ़ील्ड हैं, एक पूर्णांक और एक स्ट्रिंग, उस क्रम में क्रमबद्ध है, इसलिए वे दोनों एक पूर्णांक लिखते/पढ़ते हैं, और फिर एक स्ट्रिंग, जिसमें एन्कोडेड प्रारूप में निर्दिष्ट करने की आवश्यकता नहीं होती है, के बारे में।

जीडब्ल्यूटी-आरपीसी प्रोटोकॉल संस्करणित है (यह नियमित रूप से नए जीडब्ल्यूटी संस्करण जारी किए जाने के रूप में बदलता है), और वर्ग और धारावाहिक फ़ील्ड के नामों का उपयोग करता है ताकि क्लाइंट और सर्वर दोनों वर्गों के समान संस्करणों का उपयोग कर सकें (जिसका अर्थ है हर बार जब आप एक धारावाहिक वर्ग बदलते हैं तो आपको अपने क्लाइंट कोड को पुन: संकलित और पुन: नियोजित करना होगा)।

सबसे अच्छा प्रलेखन कोड है, लेकिन आप इन स्लाइड में अनुरोध प्रारूप के एक सिंहावलोकन मिल जाएगा: https://www.owasp.org/images/7/77/Attacking_Google_Web_Toolkit.ppt

RequestFactory, GWT-RPC के विपरीत, एक सममित JSON आधारित प्रोटोकॉल (AutoBean के आधार पर उपयोग करता है JSON serialization) जहां क्लाइंट और सर्वर एक ही कोड से संकलित नहीं होने पर भी संवाद कर सकते हैं (ठीक है, संस्करणों के बीच किए गए परिवर्तनों के आधार पर), क्योंकि वे कक्षा और संपत्ति के नामों के आसपास जाते हैं।

+1

महान उत्तर, btw क्या आप GWT_RPCs के लिए किसी भी जावा कार्यान्वयन के बारे में जानते हैं? – Stefan

+0

Google मुझे http://code.google.com/p/gwtphp/ और http://code.google.com/p/python-gwt-rpc/ के बारे में बताता है लेकिन वे त्याग किए गए दिखते हैं (और RequestFactory जाने का तरीका है , लेकिन मुझे किसी गैर-जावा कार्यान्वयन से अवगत नहीं है) –

+0

फिर से धन्यवाद। इसके अनुसार, जब मैं किसी भी जावा सर्वर आरपीसी के साथ बात नहीं करना चाहता हूं तो जाने का कोई तरीका नहीं है, मुझे कस्टम JSON या XML प्रोटोकॉल के बारे में कुछ चाहिए। – Stefan

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