2016-01-28 10 views
44

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

क्या किसी को ऐसा कुछ करने का अनुभव है या यह पता है कि इसे कैसे हल किया जा सकता है?

उत्तर

15

दुर्भाग्य से, अभी तक आपके लिए कोई अच्छा जवाब नहीं है।

ब्राउज़र से स्ट्रीमिंग आरपीसी का समर्थन करने के लिए पूरी तरह से ब्राउज़र द्वारा समर्थित HTTP2 ट्रेलरों की आवश्यकता होती है, और इस उत्तर के लेखन के समय, वे नहीं हैं।

विषय पर चर्चा के लिए this issue देखें।

अन्यथा, हाँ, आपको वेबसाकेट और जीआरपीसी के बीच एक पूर्ण अनुवाद प्रणाली की आवश्यकता होगी। शायद grpc-gateway से प्रेरणा प्राप्त करना ऐसी परियोजना की शुरुआत हो सकती है, लेकिन यह अभी भी एक बहुत लंबा शॉट है।

+0

आपके उत्तर के लिए धन्यवाद! मैंने पहले से ही http ट्रेलरों के साथ समस्या के बारे में पढ़ा है। यहां तक ​​कि एक पैच भी है जिसे किसी ने ऐसा किया है कि स्ट्रीमिंग सुविधा के बिना ब्राउजर में जीआरपीसी का उपयोग करना संभव है। जीआरपीसी-गेटवे परियोजना एक उपयोगी संकेत है। हम शायद डोनोड के साथ गेटवे कर रहे हैं ... – Oliver

+1

हाँ, अगर आप स्ट्रीमिंग के बारे में भूल जाते हैं, तो ब्राउज़र से grpc पूरी तरह से संभव है। –

+0

@ निकोलस नोबल - यह बहुत अच्छा है। क्या ब्राउज़र से गैर-स्ट्रीमिंग जीआरपीसी कॉल का कोई उदाहरण है? –

6

https://github.com/tmc/grpc-websocket-proxy लगता है जैसे यह आपकी आवश्यकताओं को पूरा कर सकता है। यह जीएसएन को वेब सॉकेट पर जीआरपीसी (जीआरपीसी-गेटवे के शीर्ष पर परत) का अनुवाद करता है।

1

जीआरपीसी बस वेबसॉकेट प्रॉक्सी ब्राउज़र में नोड जीआरपीसी एपीआई के समान दिखने के लिए आपको कुछ ऐसा करने के लिए वेबसॉकेट कनेक्शन पर सभी जीआरपीसी कॉलों को प्रॉक्सी करके बिल्कुल ठीक करता है। जीआरपीसी-गेटवे के विपरीत, यह स्ट्रीमिंग अनुरोधों और स्ट्रीमिंग प्रतिक्रियाओं के साथ-साथ गैर स्ट्रीमिंग कॉल दोनों के साथ काम करता है।

दोनों सर्वर और क्लाइंट घटक हैं। new GBC(<grpc-bus-websocket-proxy address>, <protofile-url>, <service map>)

उदाहरण के लिए: GRPC Bus WebSocket Proxy serverdocker run gabrielgrant/grpc-bus-websocket-proxy

कर ब्राउज़र तरफ से डोकर साथ चलाया जा सकता है, तो आप के साथ एक नया जीबीसी वस्तु बनाने GRPC Bus WebSocket Proxy clientnpm install grpc-bus-websocket-client साथ

स्थापित करने की आवश्यकता है और करेंगे :

var GBC = require("grpc-bus-websocket-client"); 

new GBC("ws://localhost:8080/", 'helloworld.proto', {helloworld: {Greeter: 'localhost:50051'}}) 
    .connect() 
    .then(function(gbc) { 
    gbc.services.helloworld.Greeter.sayHello({name: 'Gabriel'}, function(err, res){ 
     console.log(res); 
    }); // --> Hello Gabriel 
    }); 

क्लाइंट लाइब्रेरी एक साथ .proto फ़ाइल डाउनलोड करने के लिए सक्षम होने के लिए उम्मीद AJAX अनुरोध। service-map प्रॉक्सी सर्वर द्वारा देखी गई आपकी प्रोटो फ़ाइल में परिभाषित विभिन्न सेवाओं के यूआरएल प्रदान करता है। एक ब्राउज़र क्लाइंट और सर्वर आवरण है कि प्रस्तावित gRPC-वेब प्रोटोकॉल इस प्रकार है -

अधिक जानकारी के लिए GRPC Bus WebSocket Proxy client README

10

हमने हाल ही में बनाया gRPC-वेब (https://github.com/improbable-eng/grpc-web) देखें। उस रेपो में उदाहरण को एक अच्छा प्रारंभिक बिंदु प्रदान करना चाहिए।

यदि आप गोलांग का उपयोग कर रहे हैं तो इसे अपने जीआरपीसी सर्वर के लिए स्टैंडअलोन प्रॉक्सी या रैपर की आवश्यकता होती है। प्रॉक्सी/रैपर प्रतिक्रिया शरीर में ट्रेलरों को पैकेज करने के लिए प्रतिक्रिया को संशोधित करता है ताकि उन्हें ब्राउज़र द्वारा पढ़ा जा सके।

प्रकटीकरण: मैं इस परियोजना का रखरखाव कर रहा हूं।

+1

हत्यारा सुविधा अब किसी भी प्रोटो फ़ाइल के लिए एक HTML playground पृष्ठ बनाने की क्षमता होगी जो swagger के लिए किया गया है। इस तरह किसी भी जीआरपीसी सेवा का आसानी से ब्राउज़र के माध्यम से परीक्षण किया जा सकता है। – Setheron

0

वेब पर gRPC के साथ मौजूदा समाधान को देखते हुए, यहाँ क्या इस लेखन के समय में वहाँ बाहर उपलब्ध है (और मैं क्या पाया जाता है):

  • gRPC-web:
  • gRPC-web-proxy ग्राहक
  • के लिए टाइपप्रति की आवश्यकता है: आवश्यकता है जाओ
  • gRPC-gateway: .proto संशोधन और सजावट
  • gRPC-bus-websocket-proxy-server की आवश्यकता है: यह परीक्षण का अभाव है और
  • 0 परित्यक्त लगता है इस दस्तावेज़ लिखने के रूप में
  • gRPC-dynamic-gateway: सरल gRPC सेवाओं और प्रमाणीकरण के लिए एक overkill का एक सा अजीब
  • gRPC-bus है: परिवहन

मैं भी बेशर्म अपने ही समाधान है जो मैं अपनी कंपनी के लिए लिखा था प्लग करने के लिए चाहते हैं और यह है के लिए कुछ की आवश्यकता है

: एक gRPC सेवा है कि केवल एकल और सर्वर स्ट्रीमिंग का कॉल भी शामिल करने के लिए प्रॉक्सी अनुरोध करने के लिए उत्पादन में इस्तेमाल किया जा रहा

कोड के प्रत्येक इंच परीक्षण द्वारा कवर किया गया है। यह एक एक्सप्रेस मिडलवेयर है इसलिए इसे आपके जीआरपीसी सेटअप में कोई अतिरिक्त संशोधन की आवश्यकता नहीं है। आप एक्सप्रेस करने के लिए HTTP प्रमाणीकरण भी निर्दिष्ट कर सकते हैं (उदाहरण के लिए पासपोर्ट के साथ)।

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