2012-11-26 38 views
6

विचित्र रूप से मुझे यह जानकारी googling द्वारा नहीं मिली। यूनिक्स डोमेन सॉकेट बनाम टीसीपी सॉकेट का उपयोग कर कनेक्शन स्थापित करने की लागत क्या है?यूनिक्स डोमेन सॉकेट बनाम टीसीपी सॉकेट का उपयोग कर कनेक्शन स्थापित करने की लागत क्या है?

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

उत्तर

6

यदि आप कोड को देखते हैं, तो आप देखेंगे कि यूनिक्स डोमेन सॉकेट टीसीपी सॉकेट की तुलना में बहुत कम कोड निष्पादित करते हैं।

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

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

वैसे, इस पत्र पता चलता है कि यूनिक्स डोमेन सॉकेट डाटा हस्तांतरण के लिए भी पाइपों से वास्तव में तेजी से कर रहे हैं:

http://osnet.cs.binghamton.edu/publications/TR-20070820.pdf

दुर्भाग्य से, वे कनेक्शन स्थापना लागत के विशिष्ट माप भी नहीं किया है, लेकिन के रूप में मैंने कहा है, मैंने लिनक्स स्रोत कोड को देखा है और यह वास्तव में टीसीपी कनेक्शन स्थापना कोड से काफी सरल है।

+0

ग्रेट उत्तर। धन्यवाद! – expert

3

टीसीपी सॉकेट का उपयोग कर किसी सर्वर से कनेक्ट करने से नेटवर्क ट्रैफ़िक, साथ ही साथ टीसीपी three-way handshake शामिल हो सकता है।

स्थानीय सॉकेट (जिसे पहले यूनिक्स डोमेन सॉकेट के नाम से जाना जाता है) सभी स्थानीय हैं, लेकिन डिस्क पर भौतिक फ़ाइल तक पहुंचने की आवश्यकता है।

यदि आप केवल स्थानीय संचार करते हैं तो प्रोटोकॉल से कम ओवरहेड होने पर स्थानीय सॉकेट तेज हो सकते हैं। यदि आपके एप्लिकेशन को दूरस्थ रूप से कनेक्ट करने की आवश्यकता है तो आप स्थानीय सॉकेट का उपयोग नहीं कर सकते हैं।


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