2008-09-15 14 views
9

मैं एक सर्वर और कई ग्राहकों के बीच डेटा अनुरोध/फ़ाइल स्थानान्तरण बनाने के लिए पाइथन में समर्थित एक अच्छा सर्वर/क्लाइंट प्रोटोकॉल ढूंढ रहा हूं। सुरक्षा भी एक मुद्दा है - इसलिए सुरक्षित लॉगिन एक प्लस होगा। मैं एक्सएमएल-आरपीसी में देख रहा हूं, लेकिन यह एक बहुत पुराना (और संभवतः इन दिनों अप्रयुक्त है?) प्रोटोकॉल दिखता है।बेस्ट पायथन समर्थित सर्वर/क्लाइंट प्रोटोकॉल?

+3

आपने इसे कैसे हल किया? – cmcginty

उत्तर

5

Pyro (पायथन रिमोट ऑब्जेक्ट्स) काफी चालाक है यदि आपके सभी सर्वर/क्लाइंट पाइथन में होंगे। मैं बहुत उपयोग करता हूं हालांकि मैं मेजबानों के साथ संवाद कर रहा हूं जो हमेशा पायथन नहीं होते हैं। एक्सएमपीपी खुद को काफी आसानी से विस्तारित करने के लिए उधार देता है।

पाइथन के लिए एक उत्कृष्ट एक्सएमपीपी लाइब्रेरी है जिसे PyXMPP कहा जाता है जो उचित रूप से अद्यतित है और ट्विस्ट पर कोई निर्भरता नहीं है।

1

मैं http का उपयोग करता हूं और समझने के साथ शुरू करता हूं कि पाइथन library ऑफ़र क्या है।

तो मैं अधिक औद्योगिक ताकत Twisted लाइब्रेरी पर आगे बढ़ जाऊंगा।

3

HTTP आपकी आवश्यकताओं के अनुरूप लगता है और पायथन में बहुत अच्छी तरह से समर्थित है।

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

प्रारंभ करने के लिए, मैं क्लाइंट के लिए urllib और सर्वर के लिए WSGI service behind Apache का उपयोग करने का सुझाव दूंगा। उचित रूप से HTTPS से निपटने के लिए अपाचे स्थापित किया जा सकता है।

-1

आरपीसी क्षेत्र में, JSON-RPC XML-RPC पर एक बड़ा प्रदर्शन में सुधार लाना होगा: http://json-rpc.org/wiki/python-json-rpc

+0

yaml के साथ गति तुलना क्या है? –

0

XMLRPC बहुत साथ आरंभ करने के लिए आसान है, और मेरे पिछले काम में, हम इसे बड़े पैमाने पर इस्तेमाल इंट्रा के लिए एक वितरित प्रणाली में नोड संचार। जब तक आप इस तथ्य का ट्रैक रखें कि कोई भी मूल्य आसानी से स्थानांतरित नहीं किया जा सकता है, यह काम करना आसान है, और पाइथन की मानक लाइब्रेरी में शामिल है।

इसे https पर चलाएं और सभी कॉलों में उपयोगकर्ता नाम/पासवर्ड पैरामीटर जोड़ें, और आपके पास सरल सुरक्षा होगी। हालांकि, Python में सर्वर प्रमाणपत्र को सत्यापित करना कितना आसान है, इस बारे में निश्चित नहीं है।

हालांकि, यदि आप बड़ी मात्रा में डेटा स्थानांतरित कर रहे हैं, तो एक्सएमएल में कोडिंग एक बाधा बन सकती है, इसलिए REST का उपयोग करके - https पर अंतर्निहित आर्किटेक्चर xmlrpclib जितना अच्छा हो सकता है।

9

यदि आप फ़ाइल स्थानान्तरण करना चाहते हैं, तो XMLRPC संभावित रूप से खराब विकल्प है। यह आवश्यक होगा कि आप अपने सभी डेटा को एक्सएमएल (और इसे स्मृति में लोड करें) के रूप में एन्कोड करें।

"डेटा अनुरोध" और "फ़ाइल स्थानान्तरण" मेरे लिए सादे पुराने HTTP की तरह बहुत कुछ लगता है, लेकिन समस्या का आपका विवरण आपकी आवश्यकताओं को स्पष्ट नहीं करता है। अनुरोध में किस तरह की जानकारी को एन्कोड किया जाना चाहिए? क्या एक यूआरएल "http://yourserver.example.com/service/request?color=yellow&flavor=banana" पर्याप्त होगा?

पाइथन में बहुत सारे HTTP क्लाइंट और सर्वर हैं, जिनमें से कोई भी विशेष रूप से महान नहीं है, लेकिन जिनमें से सभी मुझे यकीन है कि मूल फ़ाइल स्थानांतरण के लिए काम किया जाएगा। आप सुरक्षा को "सामान्य" वेब मार्ग कर सकते हैं, जो HTTPS और पासवर्ड का उपयोग करना है, जो शायद पर्याप्त होगा।

यदि आप दो-तरफा संचार चाहते हैं तो HTTP गिर जाता है, और ट्विस्टेड perspective broker (PB) या asynchronous messaging protocol (AMP) जैसे प्रोटोकॉल आपको बेहतर तरीके से दिखा सकते हैं। इन प्रोटोकॉल निश्चित रूप से मुड़कर समर्थित हैं।

+0

ओह, लेकिन [अनुरोध] (http://docs.python-requests.org/en/latest/index.html) * * विशेष रूप से महान है। imho –

+0

यह भी देखें: https://github.com/dreid/treq – Glyph

4

मेरा सुझाव है कि आप देखें 1. XMLRPC 2. JSONRPC 3. SOAP 4. REST/ATOM XMLRPC मान्य विकल्प है। चिंता मत करो यह बहुत पुराना है। वह एक समस्या नही है। यह इतना आसान है कि मूल विनिर्देश के बाद थोड़ा बदलाव करना आवश्यक है। समर्थक यह है कि प्रत्येक प्रोग्रामिंग लैंगेज में मुझे पता है कि क्लाइंट के लिए एक पुस्तकालय लिखा जाना चाहिए। निश्चित रूप से पाइथन के लिए। मैंने इसे mod_python के साथ काम किया और इसमें कोई समस्या नहीं थी। इसके साथ बड़ी समस्या इसकी क्रियापदता है। सरल मूल्यों के लिए बहुत सारे एक्सएमएल ओवरहेड हैं। आप इसे कारण से gzip कर सकते हैं, लेकिन फिर आप फिडलर जैसे उपकरणों के साथ कुछ डीबगिंग क्षमता खो देते हैं।

मेरी व्यक्तिगत वरीयता JSONRPC है। इसमें सभी एक्सएमएलआरपीसी फायदे हैं और यह बहुत कॉम्पैक्ट है। इसके अलावा, जावास्क्रिप्ट क्लाइंट इसे "eval" कर सकते हैं ताकि कोई पार्सिंग आवश्यक न हो। उनमें से अधिकांश मानक के संस्करण 1.0 के लिए बनाए गए हैं। मैंने 1.1 1.2 और 2.0 नामक इसे सुधारने के विभिन्न प्रयासों को देखा है, लेकिन वे एक दूसरे के शीर्ष पर नहीं बनाए गए हैं, और मेरे ज्ञान के लिए, अभी तक व्यापक रूप से समर्थित नहीं हैं। 2.0 सबसे अच्छा दिखता है, लेकिन मैं अब भी 1.0 अक्टूबर (0 99 0)

तीसरा उम्मीदवार आरईएसटी/एटीओएम होगा। आरईएसटी एक सिद्धांत है, और एटीओएम यह है कि जब आप POST, PUT अनुरोधों और प्रतिक्रिया प्राप्त करने की आवश्यकता होती है तो आप डेटा के बड़े हिस्से को कैसे व्यक्त करते हैं। इसके बहुत अच्छे कार्यान्वयन के लिए, Google के एपीआई GData को देखें। असली असली अच्छा है।

SOAP पुराना है, और बहुत सारे पुस्तकालय/लैंगुग इसका समर्थन करते हैं। आईटी भारी और जटिल है, लेकिन यदि आपके प्राथमिक ग्राहक .NET या जावा हैं, तो यह परेशान हो सकता है। विजुअल स्टूडियो आपकी डब्लूएसडीएल फ़ाइल आयात करेगा और एक रैपर और सी # प्रोग्रामर को बनाएगा, यह वास्तव में स्थानीय असेंबली की तरह दिखता है।

इस सब के बारे में अच्छी बात यह है कि यदि आप अपने समाधान को सही तरीके से आर्किटेक्ट करते हैं, तो पाइथन के लिए मौजूदा पुस्तकालय आपको अधिक से अधिक ओवरहेड के साथ अधिक समर्थन करने की अनुमति देंगे। एक्सएमएलआरपीसी और जेएसओएनआरपीसी विशेष रूप से अच्छे मैच हैं।

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

परिवहन सुरक्षा पर निर्भर करता है। यह obvously एसएसएल (एचटीटीपीएस) है। मैं वर्तमान में याद नहीं कर सकता कि XMLRPC किस प्रकार से संबंधित है, लेकिन जेएसओएनआरपीसी कार्यान्वयन के साथ मेरे पास यह मामूली है - आप केवल अपने यूआरएल में https को JSONRPC में बदलते हैं और यह SSL सक्षम परिवहन पर जा रहा है।

+2

प्रश्न बताता है * सुरक्षा भी एक मुद्दा है *; जावास्क्रिप्ट में नेटवर्क से डेटा को 'eval'-ing मिलता है, वास्तव में इसके साथ संगत नहीं है। –

1

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

पाइरो-विशिष्ट आरपीसी लाइब्रेरी जैसे पाइरो, या जो ट्विस्ट प्रदान करता है (ट्विस्टेड स्प्रेड) का उपयोग करें।

1

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

OpenSSH मानक और पोर्टेबल एसएसएच क्लाइंट और सर्वर है, और पाइथन से उपप्रोसेसेस के माध्यम से इसका उपयोग किया जा सकता है। यदि आप अधिक लचीलापन चाहते हैं तो ट्विस्टेड में Twisted Conch शामिल है जो एक एसएसएच क्लाइंट और सर्वर कार्यान्वयन है जो लिनक्स और विंडोज दोनों पर एक एसएसएच स्टैक के लचीले प्रोग्राम करने योग्य नियंत्रण प्रदान करता है। मैं उत्पादन में दोनों का उपयोग करता हूं।

0

Facebook's thrift प्रोजेक्ट एक अच्छा जवाब हो सकता है। यह ऑब्जेक्ट पास करने के लिए एक हल्के वजन प्रोटोकॉल का उपयोग करता है और आपको अपनी इच्छित भाषा का उपयोग करने की अनुमति देता है। यह सुरक्षा पर गिर सकता है हालांकि मुझे लगता है कि कोई नहीं है।

7

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

मैंने व्यक्तिगत रूप से कई परियोजनाओं पर एक्सएमएल-आरपीसी का उपयोग किया है, और यह हमेशा वही करता है जो मैं उम्मीद कर रहा था। मैं आमतौर पर सी ++, जावा और पायथन के बीच जा रहा था। मैं अक्सर पायथन में libxmlrpc का उपयोग करता हूं क्योंकि यह याद रखना आसान है और इंटरैक्टिव टाइप करना आसान है, लेकिन यह वास्तव में वैकल्पिक pyxmlrpc से बहुत धीमा है।

पीएएएमएफ़ ज्यादातर फ्लैश क्लाइंट के साथ आरपीसी के लिए है, लेकिन यह एक कॉम्पैक्ट आरपीसी प्रारूप भी देखने लायक है।

जब आपके पास दोनों सिरों पर पायथन है, तो मुझे विश्वास नहीं है कि Pyro (पायथन रिमोट ऑब्जेक्ट्स) पाइरो में भी एक "नाम सर्वर" है जो सेवाओं को नेटवर्क पर उनकी उपलब्धता की घोषणा करने देता है। ग्राहक नाम सर्वर का उपयोग उन सेवाओं को खोजने के लिए करते हैं, जिनकी आवश्यकता होती है चाहे वे किसी विशेष पल में सक्रिय हों। यह आपको मुफ्त रिडंडेंसी देता है, और बिना किसी डाउनटाइम के एक मशीन से दूसरी मशीन में सेवाओं को स्थानांतरित करने की क्षमता देता है।

सुरक्षा के लिए, मैं एसएसएच पर सुरंग करता हूं, या कनेक्शन स्तर पर टीएलएस या एसएसएल का उपयोग करता हूं। बेशक, ये सभी विकल्प अनिवार्य रूप से वही हैं, उनके पास सेटअप की कई कठिनाइयां हैं।

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