मेरे पास क्लाइंट और सर्वर प्रोग्राम हैं जो अब टीसीपी के माध्यम से संवाद करते हैं। मैं इसके बजाए POSIX संदेश कतारों का उपयोग करने का प्रयास कर रहा हूं (ऐसे मामलों में जहां क्लाइंट और सर्वर एक ही मशीन पर हैं)। मेरी आशा है कि यह प्रदर्शन में सुधार करेगा (विशेष रूप से कम विलंबता के माध्यम से)।टीसीपी सॉकेट के बजाय POSIX संदेश कतारों का उपयोग करना - "कनेक्शन" कैसे स्थापित करें?
मैंने इसमें से अधिकांश काम किया है, लेकिन मुझे एक चीज़ के बारे में निश्चित नहीं है: "कनेक्शन" कैसे स्थापित करें। सर्वर तो मैं TCP कनेक्शन का अनुकरण करने की तो जैसे प्रक्रिया की स्थापना के लिए परीक्षा रहा हूँ, समवर्ती एकाधिक ग्राहकों से कनेक्शन स्वीकार करता है:
- सर्वर लगातार इसे से एक प्रसिद्ध नाम के साथ एक कतार खोलता है और पढ़ता है (यह
select(2)
उपयोग कर सकते हैं टीसीपी के साथ)। - ग्राहक तीन कतार खोलता है: मनमानी नामों के साथ दो (कुछ विशिष्टता सहित पीआईडी जैसे टकराव से बचने के लिए), और सर्वर द्वारा उपयोग किए जाने वाले जाने-माने नाम के साथ।
- ग्राहक ग्राहक की कतार में एक "कनेक्ट" संदेश पोस्ट करता है, जिसमें ग्राहक के कतार नाम शामिल हैं (एक क्लाइंट-टू-सर्वर ट्रैफ़िक के लिए नामित है और दूसरा बातचीत के लिए)।
- सर्वर क्लाइंट के कनेक्ट संदेश में नामित कतार खोलता है और क्लाइंट-टू-सर्वर एक से पढ़ना (चयन) शुरू करता है।
- क्लाइंट प्रसिद्ध नाम के साथ सर्वर कतार को बंद कर देता है। क्लाइंट द्वारा नामित दो कतारों का उपयोग करके दो-तरफा संचार आय (प्रत्येक दिशा के लिए एक)।
आप शायद देख सकते हैं कि यह योजना आम टीसीपी विधि के समान कैसे है, और यह कोई दुर्घटना नहीं है। हालांकि, मैं जानना चाहता हूं:
- क्या आप इसे करने का बेहतर तरीका सोच सकते हैं?
- क्या आप मेरी विधि के साथ कोई संभावित समस्याएं देखते हैं?
- क्या आपके पास कोई अन्य विचार है, जिसमें एक ही मशीन पर टीसीपी की बजाय संदेश कतारों का उपयोग करने की संभावना शामिल है, वास्तव में प्रदर्शन (विलंबता) में सुधार होगा?
ध्यान रखें कि मैंने पहले पॉसिक्स संदेश कतार का उपयोग नहीं किया है (मैंने कुछ समय पहले आईबीएम वेबस्पियर एमक्यू का उपयोग किया था, लेकिन यह अलग है)। मंच लिनक्स है।
आप कहते हैं कि मेरे "प्रश्न में कोई बदलाव नहीं है कि आप यह परिवर्तन क्यों कर रहे हैं।" मैंने इसका जिक्र किया: प्रदर्शन (विलंबता)। क्या सिस्टम वी संदेश पंक्तियों को POSIX से कार्यक्षमता में अलग करता है? जो पॉज़िक्स मैं उपयोग कर रहा हूं (उदा। Mq_open (3)) आपके द्वारा उल्लेख किए गए "चुनिंदा" संदेशों का समर्थन नहीं करते हैं। –
मैंने अब नामित पाइप का उपयोग करने का प्रयास किया है। वे POSIX संदेश कतारों की तुलना में धीमे (कम से कम छोटे संदेश पास करने के लिए) धीमे हैं। –