gRPC एक मॉडर्न, ओपन-सोर्स, और हाई-परफ़ॉर्मेंस वाला आरपीसी फ़्रेमवर्क है. यह किसी भी एनवायरमेंट में काम कर सकता है. यह डेटा सेंटर में और अलग-अलग डेटा सेंटर में मौजूद सेवाओं को आसानी से कनेक्ट कर सकता है. साथ ही, इसमें लोड बैलेंसिंग, ट्रेसिंग, हेल्थ-चेकिंग, और पुष्टि करने की सुविधा के लिए प्लगइन का इस्तेमाल किया जा सकता है. यह डिस्ट्रिब्यूटेड कंप्यूटिंग के लास्ट माइल में भी लागू होता है. इससे डिवाइसों, मोबाइल ऐप्लिकेशन, और ब्राउज़र को बैकएंड सेवाओं से कनेक्ट किया जा सकता है. gRPC की आधिकारिक वेबसाइट पर जाकर, इससे जुड़े दस्तावेज़ पढ़े जा सकते हैं. साथ ही, ओपन सोर्स कम्यूनिटी से मदद पाई जा सकती है. इस गाइड में, gRPC का इस्तेमाल करके Android ऐप्लिकेशन बनाने के समाधानों के बारे में बताया गया है.
grpc.io, gRPC प्रोजेक्ट की आधिकारिक वेबसाइट है. gRPC के काम करने के तरीके के बारे में ज़्यादा जानने के लिए, gRPC क्या है? लेख पढ़ें और gRPC के कॉन्सेप्ट. Android ऐप्लिकेशन में gRPC इस्तेमाल करने का तरीका जानने के लिए, gRPC Android Java Quickstart में दिया गया Hello World उदाहरण देखें. आपको GitHub पर, gRPC Android के कई अन्य उदाहरण भी मिल सकते हैं.
सुविधाएं
- प्रोसीजर कॉल की मदद से इसे आसान बनाया जा सकता है
- आरपीसी होने की वजह से, प्रोग्रामिंग मॉडल में प्रोसीज़र कॉल होते हैं: टेक्नोलॉजी का नेटवर्किंग पहलू, ऐप्लिकेशन कोड से अलग होता है. इससे ऐसा लगता है कि यह एक सामान्य इन-प्रोसेस फ़ंक्शन कॉल है. क्लाइंट-सर्वर के बीच होने वाले इंटरैक्शन पर, एचटीटीपी रिसॉर्स के तरीकों (जैसे कि GET, PUT, POST, और DELETE) के सिमैंटिक का कोई असर नहीं पड़ेगा. REST API की तुलना में, आपका लागू किया गया तरीका ज़्यादा स्वाभाविक लगता है. इसमें एचटीटीपी प्रोटोकॉल के मेटाडेटा को मैनेज करने की ज़रूरत नहीं होती.
- एचटीटीपी/2 की मदद से नेटवर्क ट्रांसमिशन को बेहतर बनाना
- मोबाइल डिवाइसों से बैकएंड सर्वर पर डेटा ट्रांसमिट करने में बहुत ज़्यादा संसाधन लग सकते हैं. स्टैंडर्ड एचटीटीपी/1.1 प्रोटोकॉल का इस्तेमाल करने पर, मोबाइल डिवाइस से क्लाउड सेवा के साथ बार-बार कनेक्ट करने पर बैटरी खत्म हो सकती है. साथ ही, इससे लेटेन्सी बढ़ सकती है और अन्य ऐप्लिकेशन कनेक्ट नहीं हो पाते. डिफ़ॉल्ट रूप से, gRPC, एचटीटीपी/2 पर काम करता है. इसमें दोनों दिशाओं में स्ट्रीमिंग, फ़्लो कंट्रोल, हेडर कंप्रेशन, और एक टीसीपी/आईपी कनेक्शन पर कई अनुरोधों को मल्टिप्लेक्स करने की सुविधा मिलती है. इस वजह से, gRPC से संसाधनों का इस्तेमाल कम हो सकता है. इससे ये फ़ायदे मिलते हैं: आपके ऐप्लिकेशन और क्लाउड में चल रही सेवाओं के बीच जवाब मिलने में कम समय लगता है, नेटवर्क का इस्तेमाल कम होता है, और मोबाइल डिवाइसों पर चल रहे क्लाइंट की बैटरी लाइफ़ बढ़ जाती है.
- स्ट्रीमिंग डेटा एक्सचेंज करने की सुविधा पहले से मौजूद है
- gRPC को शुरू से ही, HTTP/2 के साथ काम करने के लिए डिज़ाइन किया गया था. इसमें फ़ुल-डुप्लेक्स बाइ-डायरेक्शनल स्ट्रीमिंग की सुविधा भी शामिल है. स्ट्रीमिंग की मदद से, अनुरोध और जवाब का साइज़ कितना भी बड़ा हो सकता है. जैसे, ऐसी कार्रवाइयां जिनमें बहुत ज़्यादा जानकारी अपलोड या डाउनलोड करने की ज़रूरत होती है. स्ट्रीमिंग की मदद से, क्लाइंट और सर्वर एक साथ मैसेज पढ़ और लिख सकते हैं. साथ ही, संसाधन आईडी को ट्रैक किए बिना एक-दूसरे की सदस्यता ले सकते हैं. इससे, आपके ऐप्लिकेशन में इसे लागू करना ज़्यादा आसान हो जाता है.
- प्रोटोकॉल बफ़र के साथ आसान इंटिग्रेशन
- gRPC, प्रोटोकॉल बफ़र (Protobuf) का इस्तेमाल, Android के लिए ऑप्टिमाइज़ किए गए कोडजेन प्लगिन (Protobuf Java Lite) के साथ, सीरियलाइज़ेशन/डीसिरियलाइज़ेशन के तरीके के तौर पर करता है. टेक्स्ट पर आधारित फ़ॉर्मैट (जैसे कि JSON) की तुलना में, Protobuf डेटा को ज़्यादा बेहतर तरीके से ट्रांसफ़र करता है. ऐसा मार्शेलिंग की स्पीड और कोड साइज़ के हिसाब से होता है. इसलिए, इसका इस्तेमाल मोबाइल एनवायरमेंट में ज़्यादा आसानी से किया जा सकता है. साथ ही, Protobuf के मैसेज/सेवा की परिभाषा के सिंटैक्स से, आपके ऐप्लिकेशन के लिए डेटा मॉडल और ऐप्लिकेशन प्रोटोकॉल को तय करना बहुत आसान हो जाता है.
इस्तेमाल के बारे में खास जानकारी
gRPC की बुनियादी बातें - Android Java ट्यूटोरियल के मुताबिक, Android ऐप्लिकेशन के लिए gRPC का इस्तेमाल करने के लिए, ये चार चरण पूरे करने होते हैं:
- प्रोटोकॉल बफ़र की मदद से आरपीसी सेवाओं को तय करें और gRPC क्लाइंट इंटरफ़ेस जनरेट करें.
- एक ऐसा चैनल बनाएं जो क्लाइंट और सर्वर के बीच आरपीसी कॉल के लिए मीडियम के तौर पर काम करे.
- क्लाइंट साइड से आरपीसी कॉल शुरू करने के लिए, क्लाइंट स्टब बनाएं.
- लोकल प्रोसीज़र कॉल करते समय, रिमोट सर्वर को RPC कॉल करें.
उदाहरण के तौर पर, दिए गए उदाहरण में बाइट को सादे टेक्स्ट में ट्रांसमिट किया जाता है. हालांकि, आपके ऐप्लिकेशन को प्रोडक्शन में हमेशा नेटवर्क डेटा को एन्क्रिप्ट (सुरक्षित) करना चाहिए. gRPC, पुष्टि करने के लिए एसएसएल/टीएलएस एन्क्रिप्शन के साथ-साथ OAuth टोकन एक्सचेंज करने की सुविधा (Google की सेवाओं के साथ OAuth2) भी उपलब्ध कराता है. ज़्यादा जानकारी के लिए, Android पर टीएलएस और OAuth2 का इस्तेमाल करना लेख पढ़ें.
परिवहन
gRPC, Android क्लाइंट के लिए ट्रांसपोर्ट लेयर को लागू करने के दो विकल्प देता है: OkHttp और Cronet.
यहAndroidChannelBuilder
के जैसा ही है, लेकिन इसमें Android के लिए कुछ खास ऑप्टिमाइज़ेशन किए गए हैं.
यात्रा का तरीका (बेहतर) चुनें
- OkHttp
- OkHttp, मोबाइल पर इस्तेमाल करने के लिए डिज़ाइन किया गया एक आसान नेटवर्किंग स्टैक है. यह Android एनवायरमेंट में चलने के लिए, gRPC का डिफ़ॉल्ट ट्रांसपोर्ट है. अपने ऐप्लिकेशन के लिए OkHttp को gRPC ट्रांसपोर्ट के तौर पर इस्तेमाल करने के लिए,
AndroidChannelBuilder
की मदद से चैनल बनाएं. यहOkHttpChannelBuilder
को रैप करता है. साथ ही, यह Android OS के साथ नेटवर्क मॉनिटर को रजिस्टर करेगा, ताकि नेटवर्क में होने वाले बदलावों पर तुरंत प्रतिक्रिया दी जा सके. इस्तेमाल का उदाहरण gRPC-Java AndroidChannelBuilder में देखा जा सकता है.
- Cronet (एक्सपेरिमेंट के तौर पर उपलब्ध)
- Cronet, Chromium का नेटवर्किंग स्टैक है. इसे मोबाइल के लिए एक लाइब्रेरी के तौर पर पैकेज किया गया है. यह बेहतरीन QUIC प्रोटोकॉल के साथ मज़बूत नेटवर्किंग सपोर्ट देता है. यह प्रोटोकॉल, ख़ास तौर पर उन जगहों पर ज़्यादा असरदार हो सकता है जहां नेटवर्क की कनेक्टिविटी ठीक नहीं होती. Cronet के बारे में ज़्यादा जानने के लिए, Cronet का इस्तेमाल करके नेटवर्क ऑपरेशन करना लेख पढ़ें.
अपने ऐप्लिकेशन के लिए, gRPC ट्रांसपोर्ट के तौर पर Cronet का इस्तेमाल करने के लिए,
CronetChannelBuilder
की मदद से चैनल बनाएं. gRPC-Java Cronet Transport में, इस्तेमाल का उदाहरण दिया गया है.
आम तौर पर, हमारा सुझाव है कि एसडीके के नए वर्शन को टारगेट करने वाले ऐप्लिकेशन, Cronet का इस्तेमाल करें. ऐसा इसलिए, क्योंकि यह ज़्यादा बेहतर नेटवर्क स्टैक उपलब्ध कराता है. Cronet का इस्तेमाल करने से, APK का साइज़ बढ़ जाता है. ऐसा इसलिए होता है, क्योंकि बाइनरी Cronet डिपेंडेंसी जोड़ने से, ऐप्लिकेशन के साइज़ में >1 एमबी जुड़ जाता है. वहीं, OkHttp के लिए यह ~100 केबी होता है. GMSCore v.10 से, Cronet की अप-टू-डेट कॉपी को Google Play services से लोड किया जा सकता है. APK का साइज़ अब कोई समस्या नहीं है. हालांकि, जिन डिवाइसों पर GMSCore का नया वर्शन इंस्टॉल नहीं है वे अब भी OkHttp का इस्तेमाल कर सकते हैं.