2011-03-28 11 views
70

मैं तेजी से सुन रहा हूं कि तुलना में पाइथन के Twisted फ्रेमवर्क चट्टानों और अन्य ढांचे की पीला।ट्विस्ट के बारे में इतना अच्छा क्या है?

क्या कोई इस पर कुछ प्रकाश डाल सकता है और संभावित रूप से अन्य नेटवर्क प्रोग्रामिंग ढांचे के साथ ट्विस्ट की तुलना कर सकता है।

+2

ऐसा कुछ भी नहीं लगता है [वहां पर] (http://wiki.python.org/moin/UsefulModules#Networking) जो दूरस्थ रूप से ट्विस्ट से तुलना करता है, इसलिए सवाल का जवाब देना मुश्किल है । आप किस विकल्प पर विचार कर रहे हैं? –

+1

@ स्वेन भी एक पायथन डेवलपर नहीं है, मैं सिर्फ इतना उत्सुक हूं कि ट्विस्ट को जितना बड़ा घोषित किया जाता है उतना ही बड़ा होता है। –

+2

@ स्वेन मार्नच: यह एक समस्या डोमेन पर निर्भर करता है उदाहरण के लिए, ['gevent'] (http://www.gevent.org/)" भाग्य टेलर "एप्लिकेशन के लिए मुड़ने का विकल्प है http://blip.tv/ फ़ाइल/4883016 – jfs

उत्तर

113

ट्विस्ट के कई अलग-अलग पहलू हैं जो आपको ठंडा लग सकता है।

मुड़ बहुत सारे और प्रोटोकॉल कार्यान्वयन के बहुत सारे शामिल है, जिसका अर्थ है कि अधिक नहीं की तुलना में होने की संभावना वहाँ एक API आप कुछ दूरस्थ प्रणाली (या तो ग्राहक या ज्यादातर मामलों में सर्वर) से बात करने के लिए उपयोग कर सकते हो जाएगा - यह HTTP, FTP, SMTP, POP3, IMAP4 हो , DNS, IRC, MSN, OSCAR, XMPP/Jabber, telnet, SSH, एसएसएल, NNTP, या वास्तव में फिंगर, या अध्यक्ष, या DJB'snetstrings तरह निचले स्तर प्रोटोकॉल निर्माण-प्रोटोकॉल से एक की तरह अस्पष्ट प्रोटोकॉल में से एक, simple line-oriented protocols, या मुड़ के कस्टम प्रोटोकॉल की एक भी जैसे Perspective Broker (PB) या Asynchronous Messaging Protocol (AMP)

ट्विस्ट के बारे में एक और अच्छी चीज यह है कि इन निम्न-स्तरीय प्रोटोकॉल कार्यान्वयन के शीर्ष पर, आपको अक्सर एक अमूर्तता मिल जाएगी जो उपयोग करने में कुछ आसान है। उदाहरण के लिए, एक HTTP सर्वर लिखते समय, ट्विस्टेड वेब a "Resource" abstraction प्रदान करता है जो आपको पाइथन ऑब्जेक्ट्स से यूआरएल पदानुक्रमों को बनाने की सुविधा देता है ताकि यह निर्धारित किया जा सके कि अनुरोधों का जवाब कैसे दिया जाएगा।

यह सब सहयोगी एपीआई के साथ मिलकर जुड़ा हुआ है, मुख्य रूप से इस तथ्य के कारण कि नेटवर्क पर अवरुद्ध करके इस कार्यक्षमता में से कोई भी कार्यान्वित नहीं किया गया है, इसलिए आपको a thread for every operation you want to do शुरू करने की आवश्यकता नहीं है। यह स्केलेबिलिटी में योगदान देता है जो लोग अक्सर ट्विस्ट में श्रेय देते हैं (हालांकि यह एक स्केलेबिलिटी है जिसमें केवल एक कंप्यूटर शामिल है, न कि स्केलेबिलिटी की तरह जो आपके एप्लिकेशन को मेजबानों के पूरे समूह का उपयोग करने देती है) क्योंकि ट्विस्ट हजारों को संभाल सकता है एक थ्रेड में कनेक्शन, जो हजारों धागे होने से बेहतर काम करता है, प्रत्येक एक कनेक्शन के लिए।

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

ट्विस्ट भी वास्तव में concerned with quality है।तो आप एक ट्विस्ट रिलीज में rarely find regressions देखेंगे, और अधिकांश एपीआई सिर्फ काम करते हैं, भले ही आप उन्हें सामान्य तरीके से उपयोग नहीं कर रहे हैं (क्योंकि हम उन सभी तरीकों का परीक्षण करने का प्रयास करते हैं जो आप उनका उपयोग कर सकते हैं, न कि सामान्य तरीके से) । यह पिछले 3 या 4 वर्षों में ट्विस्ट (या संशोधित) में जोड़े गए सभी कोडों के लिए विशेष रूप से सच है, क्योंकि तब से 100% लाइन कवरेज न्यूनतम परीक्षण आवश्यकता रही है।

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

जो कुछ भी कहता है, मुझे मुड़ने के बारे में सबसे अच्छा लगता है कि यह एक बहुत उबाऊ लाइब्रेरी है जो मुझे बहुत सारी उबाऊ समस्याओं को अनदेखा करने देती है और केवल रोचक और मजेदार चीजों पर ध्यान केंद्रित करती है। :)

+1

और संसाधन अबास्ट्रक्शन के बारे में आपके द्वारा दिए गए लिंक से खराब तरीके से प्रलेखित दिखता है। लेकिन महान जवाब के लिए धन्यवाद, उत्थान। – vinipsmaker

+0

एक अच्छा बिंदु है, "अनियंत्रित सॉकेट त्रुटियों" के बारे में बता रहा है। अच्छा स्पष्टीकरण। धन्यवाद। – Haranadh

8

वैसे यह शायद स्वाद के अनुसार है।

ट्विस्ट आपको आसानी से ईवेंट संचालित नेटवर्क सर्वर/क्लाइंट बनाने की अनुमति देता है, बिना इसे पूरा करने में जो कुछ भी हो रहा है, उसके बारे में वास्तव में चिंता किए बिना। और MIT License के लिए धन्यवाद, ट्विस्ट लगभग कहीं भी इस्तेमाल किया जा सकता है। लेकिन मैंने कोई बेंचमार्किंग नहीं की है, इसलिए मुझे नहीं पता कि यह कैसे स्केल करता है, लेकिन मैं काफी अच्छा अनुमान लगा रहा हूं।

एक और प्लस Twisted Projects होगा, जिसके साथ आप जल्दी से देख सकते हैं कि अधिकांश सर्वर/सेवाओं को आप कैसे कार्यान्वित करना चाहते हैं।

ट्विस्ट भी कुछ शानदार documentation है, जब मैंने कुछ हफ्ते पहले इसके साथ शुरुआत की, तो मैं जल्दी से एक कामकाजी प्रोटोटाइप प्राप्त करने में सक्षम था।

पायथन दृश्य के लिए काफी नया कृपया अगर मैं गलत हूं तो कृपया मुझे सही करें।

+4

ट्विस्ट के साथ शुरू करने के बड़े फायदों में से एक यह है कि स्केलेबिलिटी समस्याओं की एक पूरी मेजबानी होती है जो टिस्ड स्वयं को डिज़ाइन किए जाने के तरीके के कारण कभी नहीं आती है। यह आपको अपने आप को पैर में शूट करने के लिए नए और रचनात्मक तरीकों की खोज करने की सुविधा देता है, नेटवर्क नेटवर्क के निर्माण के दौरान ऐसा करने के लिए सभी तरह के तरीकों को फिर से खोजने के बजाय :) – ncoghlan

+0

हां ट्विस्ट के साथ काम करने के साथ खुद को नोबी के रूप में, यही वह है जो मैं जल्दी से पता चला। और मुझे प्यार है कि आर्किटेक्चर ने मुझे बहुत सारी नेटटी [http://www.jboss.org/netty] की याद दिला दी है, जिसे मैंने काफी व्यापक रूप से उपयोग किया था, इसलिए सोचने का तरीका चुनना बहुत तेज़ था। –

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