2014-10-31 42 views
8

में प्रक्रिया संचार का सबसे आसान रूप मैं करना चाहता हूं: मैं स्कैला में कुछ अनुप्रयोगों (जावा के लिए जार लाइब्रेरी होने के लिए) में संचार क्षमताओं को जोड़ना चाहता हूं, और मैं इसे सबसे अधिक में करना चाहता हूं दर्द रहित तरीके से, प्राप्त अनुरोधों, RPC सर्वर आदि के लिए कोई बिलाव, युद्ध, रास्तों के साथस्कैला

क्या मैं किया है: मैं पुस्तकालयों के एक नंबर, घाट, JAX-रुपये, जैक्सन, आदि जैसे जाँच किया गया है लेकिन फिर मैं उदाहरण देखता हूं और वे आमतौर पर कॉन्फ़िगरेशन, डब्लूएसडीएल फाइलों आदि के लिए कई अलग-अलग फ़ोल्डरों को शामिल करते हैं। अधिकांश उदाहरणों में मुख्य विधि की कमी है और मेरे पास कोई स्पष्ट तस्वीर नहीं है कि उनके पास कितनी अतिरिक्त आवश्यकताएं हो सकती हैं (जैसे टोमकैट)। मैं बस "सर्वर" पर एक सॉकेट खोलने के लिए सुनने के लिए, फिर "ग्राहक" के साथ कनेक्ट और कुछ JSON हस्तांतरण, दोनों दिशाओं में विचार कर रही है:

मैं करने के लिए योजना बना रहा हूँ क्या । यह काफी मानक होना चाहिए ताकि मैं अन्य प्रोग्रामिंग भाषाओं को संगत तरीकों से उपयोग कर सकूं (जैसे पायथन)।

क्या मैं पूछ रहा हूँ: मुझे पता है कि कुछ पुस्तकालय इस आसान बना देता है वह यह है कि क्या वहाँ चाहते हैं। जरूरी नहीं कि कच्चे सॉकेट का उपयोग करें, लेकिन कुछ प्रक्रियाओं में कुछ प्रक्रिया संचार स्थापित करें, शायद नोड.जेएस जितना आसान नहीं, लेकिन कुछ समान है।

बोनस: यह

  • को शांत होगा खुले मानकों
  • है प्रमाणीकरण

का उपयोग करके अन्य प्रोग्रामिंग भाषाओं (अजगर जैसे) का उपयोग करने में सक्षम हो लेकिन मुझे नहीं पता वास्तव में इस बिंदु पर किसी भी की जरूरत है।

उत्तर

6

मैं तुम्हें RPC क्लाइंट/सर्वर सिस्टम की जरूरत है, मैं इन दोनों में से एक लेने के लिए सुझाव है:

  1. Finagle - सुपर लचीला और शक्तिशाली RPC क्लाइंट/फिनेक्ल से सर्वर। आप अपनी सेवा को थ्रिफ्ट के साथ परिभाषित कर सकते हैं, और यह स्केल में क्लाइंट/सर्वर के लिए स्टब्स उत्पन्न करेगा। बहाव के साथ यह पायथन समर्थन जोड़ने के लिए सीधा होना चाहिए।

  2. Spray - आरईएसटी सेवाओं को बनाने पर केंद्रित बहुत छोटी लाइब्रेरी। यह फिनगल के रूप में इतना शक्तिशाली नहीं है, हालांकि बहुत आसान है।और आरईएसटी आपको किसी अन्य क्लाइंट का उपयोग करने की अनुमति देता है

  3. Remotely - उचित लोगों के लिए एक सुरुचिपूर्ण आरपीसी प्रणाली। दिलचस्प और बहुत आशाजनक परियोजना, हालांकि हो सकता है मुश्किल के साथ क्योंकि व्यापक Scalaz की + निराकार + मैक्रो उपयोग

1

ईमानदारी से यदि आप क्रॉस-भाषा संगत, सरल, सीधा और संक्षिप्त कुछ चाहते हैं तो आप सादे पुराने सॉकेट का उपयोग नहीं करना चाहते हैं!

dropwizard देखें। यह आश्चर्यजनक है और मैं इसे छोटी और बड़ी परियोजनाओं के लिए समान रूप से उपयोग करता हूं! यह आमतौर पर एक एकल विन्यास फाइल से अधिक द्वारा कॉन्फ़िगर किया जाता है। यह supports authentication भी है!

बॉक्स में से यह आपको जेएसओएन (जैक्सन का उपयोग करके) और वास्तव में बहुत अधिक इंटर-प्रोसेस संचार प्रदान करता है। बहुत सभ्य Scala support for dropwizard भी है।

यदि आपको अपना खुद का रोल करना होगा तो मैं JSON पार्सिंग के लिए Jackson का उपयोग करने की अनुशंसा करता हूं। यह उपयोग करने के लिए बहुत आसान है और scala support भी है।

0

आप एक "नियंत्रित" उपयोग के मामले जहां क्लाइंट और सर्वर एक ही लैन और पर हैं मिल गया है, तो शुरू करने के लिए टेंडेम में तैनात, मैं (विवादास्पद) Java RMI की सिफारिश करता हूं; यह गूंगा और जेवीएम-विशिष्ट है (और जावा-विशिष्ट प्रोटोकॉल का उपयोग करता है), लेकिन इसका उपयोग करना बहुत आसान है।

यदि आपको कुछ और मजबूत और क्रॉस-भाषा की आवश्यकता है, तो मैं Apache Thrift की अनुशंसा करता हूं। आप प्लेटफॉर्म-स्वतंत्र इंटरफ़ेस परिभाषा भाषा में अपने इंटरफेस लिखते हैं, और यह बहुत स्पष्ट है कि कौन से परिवर्तन संगत हैं और जो नहीं हैं; थ्रिफ्ट कंपाइलर आपके लिए उपयोग करने के लिए कंकाल इंटरफेस उत्पन्न करता है, और उसके बाद आप सर्वर को शुरू करने के लिए उस इंटरफ़ेस और कुछ पंक्तियों का कार्यान्वयन लिखते हैं (जैसा कि आप मुखपृष्ठ पर उदाहरण से देख सकते हैं)। यदि आपको प्रदर्शन की आवश्यकता है तो इसे एसिंक कार्यान्वयन के लिए भी अच्छा समर्थन मिला है। अपने आप को बाइनरी प्रोटोकॉल के साथ ही खुद को बहादुर मानक और क्रॉस-प्लेटफार्म है, या यदि आप वास्तव में चाहते हैं तो मैं जेएसओएन को परिवहन के रूप में उपयोग कर सकता हूं (हालांकि मैं इसके खिलाफ अनुशंसा करता हूं)।

0

RabbitMQ एक सर्वर लिखने और अपनी खुद की दृढ़ता, प्रवाह नियंत्रण, प्रमाणीकरण इत्यादि को लागू किए बिना जो करना चाहते हैं, उसे करने का एक आसान तरीका प्रदान करता है। आप इसे स्थापित या उपयुक्त बना सकते हैं।

  • आप एक दलाल डेमॉन प्रक्रिया शुरू
  • स्काला निर्माता में (यानी संदेश कतार का प्रबंधन करता है), आपके द्वारा निर्दिष्ट (जैसे कोई परिभाषा भाषाओं) किसी भी उपद्रव के बिना JSON तार भेजने के लिए Maven के द्वारा उपलब्ध कराया जावा एपीआई का उपयोग कर सकते हैं कतारों
  • फिर अपने अन्य स्काला कार्यक्रम में, दलाल से कनेक्ट, और कतार पर संदेशों के लिए सुनो, और आने वाली JSON पार्स

क्योंकि यह इतना लोकप्रिय है, कई ट्यूटोरियल विभिन्न पैटर्न के लिए ऑनलाइन देखते हैं आप संदेश वितरित करने के लिए उपयोग करना चाह सकते हैं, उदाहरण के लिए पब/उप, एक-से-एक, बिल्कुल-एक बार वितरण, आदि