एक ही खुला सॉकेट पर अतुल्यकालिक बहु दिशा सर्वर-ग्राहक संचार?

वोट
20

मैं जहां ग्राहक एक विंडोज़ मोबाइल 6 डिवाइस पर है एक क्लाइंट-सर्वर अनुप्रयोग, सी में लिखे ++ और सर्वर पूर्ण विंडोज पर है और सी # में लिखा है।

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

आप के लिए कुछ का उपयोग कर सकते का असर WaitForMultipleObjects()है और यह एक बफर और एक घटना है कि भेजने के लिए डेटा उपलब्ध नहीं है बताता प्राप्त पारित?

04/08/2008 को 14:52
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
7

अतुल्यकालिक संचार का उपयोग करना एकल थ्रेड में पूरी तरह से संभव है!

नेटवर्क सॉफ्टवेयर के विकास में एक आम डिजाइन पैटर्न रिएक्टर पैटर्न (कहा जाता है इस पुस्तक में देखो )। कुछ प्रसिद्ध नेटवर्क लाइब्रेरी इस पैटर्न के एक कार्यान्वयन प्रदान करता है ( एसीई को देखो )।

संक्षेप में, रिएक्टर एक वस्तु है, आप अपने सभी सॉकेट अंदर रजिस्टर, और आप कुछ करने के लिए प्रतीक्षा करें। अगर कुछ हुआ (नया डेटा पहुंचे, कनेक्शन पास ...) रिएक्टर आपको सूचित करेंगे। और निश्चित रूप से, आप एसिंक्रोनस रूप से डेटा भेजने और प्राप्त करने के लिए केवल एक ही सॉकेट का उपयोग कर सकते हैं।

17/08/2008 को 14:53
का स्रोत उपयोगकर्ता

वोट
7

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

उस समय सर्वर संदेश वापस ग्राहक के लिए भेज सकता है एक ही खुला कनेक्शन गर्त।

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

04/08/2008 को 15:30
का स्रोत उपयोगकर्ता

वोट
3

की जाँच करें asio । यह asyncronous आईओ के लिए एक क्रॉस संगत c ++ पुस्तकालय है। मुझे यकीन है कि अगर इस सर्वर (मैं एसी # परियोजना के लिए एक मानक c ++ DLL जोड़ने की कोशिश की कभी नहीं किया है), लेकिन ग्राहक के लिए यह उपयोगी होगा के लिए उपयोगी होगा नहीं हूँ।

हम अपने आवेदन के साथ इसका इस्तेमाल, और यह हमारे आईओ संगामिति समस्याओं का सबसे हल किया।

11/08/2008 को 11:00
का स्रोत उपयोगकर्ता

वोट
3

मैं तुम्हें सी # में सर्वर या सी ++ में ग्राहक के लिए अतुल्यकालिक बिट्स जोड़ने के लिए इच्छुक रहे हैं या नहीं, पर स्पष्ट नहीं कर रहा हूँ।

आप सी ++ में ऐसा करने के बारे में बात कर रहे हैं, डेस्कटॉप विंडोज प्लेटफॉर्म आई / ओ एसिंक्रोनस रूप एपीआई कि प्रयोग के माध्यम से मैं ओवरलैप / ओ सॉकेट कर सकते हैं। सॉकेट के लिए, WSASend, दोनों WSARecv async आई / ओ (प्रलेखन उनके LPOVERLAPPED पैरामीटर, जिसमें आप ईवेंट तैयार हो जाओ कि जब मैं / हे पूरा करता है से भर सकता है पर पढ़ने के लिए) की अनुमति है।

मैं विंडोज मोबाइल प्लेटफॉर्म इन कार्यों का समर्थन करता है, तो पता नहीं है, तो आपको कुछ अतिरिक्त खुदाई करने के लिए हो सकता है।

05/08/2008 को 06:30
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more