2010-11-28 13 views
14

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

मैं प्रत्येक रिसेप्टर में एक कतार लागू करने पर विचार कर रहा था, और कोई प्रसारण उन कतारों को भेजा जाता है; जब रिसेप्टर एक नया पैकेट भेजता है, तो वह उस संदेश को पैकेट पर भी जोड़ता है, अगर यह कोई समझ में आता है।

लेकिन हाँ, क्या टीसीपी के माध्यम से प्रसारण करने का कोई तरीका है, जैसे आप यूडीपी के माध्यम से कर सकते हैं?

+1

... आप एसीके पैकेट कैसे प्राप्त करेंगे? –

उत्तर

7

नहीं, ऐसा नहीं है। उदाहरण के लिए, यदि आप कई पार्टियों से बात करने की कोशिश कर रहे हैं, तो खिड़की के आकार की अवधारणा और इसे कैसे समायोजित किया जाता है।

मल्टीकास्ट की अनुमति देते हुए टीसीपी के कई विशेषताओं को साझा करने वाला एक नया प्रोटोकॉल बनाना संभव हो सकता है। लेकिन मुझे लगता है कि यह बहुत ही समस्याग्रस्त होगा। उदाहरण के लिए, जिस गति पर प्राप्तकर्ताओं को डेटा प्राप्त हुआ वह सबसे धीमी रिसीवर की सीमाओं से बाधित होगा। प्रेषक को बफर स्पेस का प्रबंधन करना होता है ताकि यदि आवश्यक हो तो धीमी रिसीवर भी पुनः प्रसारण प्राप्त कर सकता है।

नहीं, मुझे लगता है कि मल्टीकास्ट करने के लिए प्रोटोकॉल हमेशा एक विशेष उद्देश्य होना चाहिए और हाथ में सही समस्या पर ध्यान केंद्रित करना होगा। कुछ सामान्यीकृत और टीसीपी जैसी बस व्यवहार्य नहीं है।

विश्वसनीय मल्टीकास्ट थोक डेटा स्थानांतरण करने के तरीके हैं। बुनियादी विचार एक प्रकार के लूप में सूचना संचारित करने के लिए erasure codes का उपयोग करना है। फिर एक प्राप्तकर्ता केवल तब तक पैकेट प्राप्त करना शुरू कर सकता है जब तक कि मूल फ़ाइल को पुनर्निर्माण करने के लिए पर्याप्त न हो।

लेकिन ये आपके परिदृश्य को ठीक से ठीक नहीं लगते हैं।

+2

[मौजूदा या प्रस्तावित विश्वसनीय मल्टीकास्ट प्रोटोकॉल] (http://en.wikipedia.org/wiki/Reliable_multicast#Existing_or_proposed_protocols) – dreamlax

+1

@dreamlax - दिलचस्प। मैं विश्वसनीय मल्टीकास्ट थोक डेटा हस्तांतरण के लिए विचारों के बारे में जानता हूं। इसमें मिरर कोड का उपयोग करना और लूप पर फिर से प्रेषण करना शामिल है। इस तरह एक प्राप्तकर्ता मध्य में चीजों को चुनना शुरू कर सकता है और केवल तब तक प्राप्त करना जारी रखता है जब तक कि पूरी फ़ाइल को पुनर्निर्माण करने के लिए पर्याप्त डेटा न हो। – Omnifarious

0

आपके SendToAll() को सभी खुले सॉकेट के माध्यम से फिर से शुरू करने और प्रत्येक को स्वतंत्र रूप से डेटा लिखने की आवश्यकता होगी।

ब्रॉडकास्ट और मल्टीकास्ट केवल यूडीपी सॉकेट तक सीमित हैं।

+3

यह सच नहीं है, ऐसे अन्य प्रोटोकॉल हैं जो मल्टीकास्ट और प्रसारण की अनुमति देते हैं, उदाहरण के लिए, [पीजीएम] (http://en.wikipedia.org/wiki/Pragmatic_General_Multicast) है। – dreamlax

10

जैसा कि सभी ने कहा है कि टीसीपी के साथ संभव नहीं है, यह केवल यूनिकास्ट है। हालांकि विश्वसनीय मल्टीकास्ट के कार्यान्वयन हैं, जो आपको टीसीपी की विश्वसनीयता के साथ मल्टीकास्ट देना चाहिए। wikipedia देखें, खासकर Pragmatic General Multicast

2

overlay networks पर विचार करने पर विचार करें, या बस एक मैसेजिंग मिडलवेयर का उपयोग करें जो ØMQ जैसे प्रकाशित अर्थशास्त्र प्रदान करता है जो आसानी से बीएसडी सॉकेट एपीआई प्रदान करता है।

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