2009-07-22 13 views
14

मैं बस इतना करना चाहता हूं कि सॉकेट पर कुछ आरपीसी कॉल करें। मेरे पास एक सर्वर है जो बैकेंडिश सामान जेथन 2.5 चला रहा है। मुझे सीपीथॉन पर डीजेगो चलाने वाले फ्रंटेंड सर्वर से कुछ कॉल करने की आवश्यकता है। मैं दीवार के खिलाफ अपना सिर मार रहा हूं जिससे आईपीसी जा रहा है।फास्ट-आइश पायथन/ज्योथन आईपीसी?

चीजों की सूची मैं कोशिश की है:

  • Apache Thrift किसी भी वास्तविक विज्ञप्ति, बस स्नैपशॉट नहीं है। मैं कुछ स्थिर उपयोग करना चाहता हूँ।
  • JSON-RPC दिलचस्प है, और यह सॉकेट पर चलाने में सक्षम होना चाहिए, लेकिन व्यवहार में अधिकांश implementations केवल HTTP पर काम करने लगते हैं। HTTP ओवरहेड ठीक वही है जो मैं टालने की कोशिश कर रहा हूं।
  • Protocol Buffers वास्तव में केवल एक क्रमबद्ध प्रोटोकॉल है। प्रोटोबफ जो मैं इकट्ठा करता हूं उससे आरपीसी के लिए इंटरफ़ेस उत्पादन प्रदान करता है, लेकिन यह केवल इंटरफ़ेस है। वास्तव में सभी कनेक्शन कोड लिखना उपयोगकर्ता के लिए है। अगर मैं सॉकेट का उपयोग करके फंस जाऊंगा, तो मैं सीरियलाइजेशन के लिए जेएसओएन का उपयोग करूंगा। यह आसान है और faster है।
  • Pyro एक सर्वर के रूप में Jython के साथ ठीक से काम नहीं करता है। कुछ प्रकार की सॉकेट टाइमआउट समस्या। मैंने मेलिंग सूची में एक संदेश भेजा है।
  • pysage संदेश पास करने के लिए यय! केवल इसके लिए अजगर 2.6 या प्रसंस्करण मॉड्यूल (जो संकलन संकलित किया गया है) की आवश्यकता है। ज्योथन संस्करण 2.5 है और संकलित एक्सटेंशन की अनुमति नहीं देता है।
  • Candygram pysage के लिए एक दिलचस्प विकल्प है, लेकिन जहां तक ​​मैं इसे अनजान बता सकता हूं। मैंने ज्योथन के साथ भी कोशिश नहीं की है। इसके साथ कोई अनुभव?
  • Twisted Perspective Broker ट्विस्ट ज्योथन पर काम नहीं करता है।

मुझे पता है कि यह एक्सएमएल-आरपीसी के साथ ऐसा करने वाला एक स्नैप होगा, जो मुझे और भी क्रैकी बनाता है। मैं HTTP के ऊपरी हिस्से से बचना चाहता हूं, लेकिन साथ ही मैं वास्तव में अपने प्रोटोकॉल को लागू करने के लिए सॉकेट के साथ नीचे उतरना और गंदे नहीं करना चाहता हूं। अगर मैं करता हूं तो मैं गलत कर दूंगा।

कोई विचार? मैं शायद लगभग 20 मिनट तक रोने जा रहा हूं और फिर एक्सएमएल-आरपीसी का उपयोग करें।

+0

btw, मैं सिर्फ मेरे सवाल का इस समाधान पाया: http://bert-rpc.org/ – Kobold

उत्तर

5

सॉकेट का उपयोग करने के बारे में, लेकिन asyncore और asynchat की सहायता से?

कुछ लिंक:

+0

कुछ अन्य एसिंक्रोनस फ्रेमवर्क: ट्विस्ट, गीवेंट, इवेंटलेट, सिंक्लेस, कंसूरेंस। – pts

6

क्या आपने Hessian पर विचार किया है? blurb से:

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

इसमें पाइथन क्लाइंट और जावा सर्वर (और इसके अलावा) है।

अद्यतन: यदि आप HTTP के खिलाफ मर चुके हैं, तो क्यों न केवल SocketServer और pickle का उपयोग करें? एक प्रोटोकॉल की जरूरत नहीं है, गलत पाने के लिए मुश्किल है। लंबाई उपसर्ग के साथ मसालेदार तार भेजें/प्राप्त करें।

+0

हेस्सियन HTTP का उपयोग करता है, जो मैं से बचने के लिए चाहते हैं। – Kobold

0

क्या आपने कोर्बा का उपयोग करने के बारे में सोचा है? यह तेज़, पोर्टेबल और ऑब्जेक्ट उन्मुख है ...

मैंने इसे केवल जावा पक्ष पर उपयोग किया है (मुझे लगता है कि आप शुद्ध जवा ब्रोकर का उपयोग ज्योथन से कोई समस्या नहीं कर सकते हैं), और आईआईओपी के साथ आप सीपीथॉन क्लाइंट के साथ अंतःक्रिया करने में सक्षम होना चाहिए।

+0

यह बहुत अच्छी तरह से आ सकता है। अभी हमारे इंटरफ़ेस बहुत तेजी से विकसित हो रहा है, और कोर्बा बहुत भारी वजन लगता है। लेकिन हाँ, विचार मेरे लिए हुआ है। – Kobold

+0

मुझे प्रदर्शन या मेमोरी पदचिह्न की भावना में बहुत भारी वजन नहीं लगता है, इसका उपयोग एम्बेडेड सिस्टम में भी किया जाता है ... यदि आपका मतलब है कि यह उन सभी सेवाओं को तैनात करने के लिए बहुत बोझिल हो सकता है जो आप प्रदान कर सकते हैं और आप शायद नहीं करेंगे उपयोग करें, हां, तो आप बहुत सही हैं^_^ – fortran

2

दो जो मेरे लिए सबसे दिलचस्प लग रही:

  • Gearman और Python bindings। यह अब थोड़ा तेज है कि इसे सी (मूल रूप से perl) में फिर से लिखा गया है। इसका उत्पादन में उपयोग किया जाता है (हालांकि मैं उत्पादन में इस्तेमाल होने वाले अजगर बाइंडिंग के किसी भी उदाहरण को इंगित नहीं कर सकता)। यह MySQL और Postgresql में इंटरफेस बहुत दिलचस्प है (मेरे लिए)। अंत में, Django के जैकब Kaplan-Moss से todays tweet

  • RabbitMQ हालांकि यह सिर्फ एक संदेश कतार है, फिर भी आपको अपने संदेशों को क्रमबद्ध करना होगा जबतक कि आप celery का भी उपयोग न करें।

+0

वर्तमान में हम इस सर्वर को असीमित रूप से कॉल करने के लिए गाजर/RabbitMQ का उपयोग कर रहे हैं, लेकिन अब हम तुल्यकालिक कॉल करना चाहते हैं। मुझे यकीन है कि मैं कतार में इसे बना सकता हूं, लेकिन यह स्पष्ट नहीं है कि इसे एक अच्छे तरीके से कैसे किया जाए। – Kobold

2

मेरा पसंदीदा .. zeroc's ice

+0

बर्फ बहुत दिलचस्प लग रहा है। हम एक खुली परियोजना नहीं हैं, इसलिए मैं देखूंगा कि वाणिज्यिक लाइसेंस के लिए कितना खर्च होता है। – Kobold