2010-09-16 15 views
5

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

एक एकल ग्राहक इस सर्वर से कनेक्ट होगा और कतार से डेटा मांगेगा (किसी अन्य ग्राहक को किसी भी समय कनेक्ट करने की आवश्यकता नहीं होगी)। यदि कोई डेटा मौजूद नहीं है, तो ग्राहक प्रतीक्षा करेगा (1 सेकंड) और पुनः प्रयास करें।

दोनों ग्राहक और सर्वर असीमित रूप से लिखे गए हैं - मेरा प्रश्न है: क्या क्लाइंट प्रत्येक लेनदेन (थोड़ी देर के अंदर) के लिए एक नई सॉकेट बना सकता है, या बस सॉकेट को खोलें (जबकि लूप के बाहर)?

client.Connect() 

while(bCollectData) 
{ 
    ... communicate ... 

    Thread.Sleep(1000); 
} 

client.Shutdown(SocketShutdown.Both); 
client.Close(); 

उत्तर

6

मैं आपको सॉकेट को खोलने और सर्वर पर इसे अवरुद्ध करने के लिए बेहतर छोड़ने का सुझाव दूंगा, ताकि आपको थ्रेड करना पड़े। सो जाओ। जब सर्वर के पास कुछ डेटा होगा तो वह ग्राहक को संदेश भेज देगा।

कोड इस दृष्टिकोण का उपयोग कर आप सभी संदेशों को तुरंत मिलता है और क्लाइंट और सर्वर के बीच भेजे गए अनावश्यक संदेश (संदेशों जो लौट कि सर्वर कोई डाटा नहीं है) से बचने जाएगा इस

while(bCollectData) 
{ 
    _socket.recv(...); //this line will wait for response from server 
    //... process message and start another wait in the next iteration. 
} 

कुछ ऐसी दिखाई देगी।

1

मैं सॉकेट पाश के बाहर खुला छोड़ना होगा, हर यात्रा पुन: कनेक्ट संसाधनों की बर्बादी की तरह लगता है।

1

मैं सॉकेट बंद नहीं करता। हर बार जब आप कनेक्ट करते हैं तो आपके पास कुछ हैंडशेक होता है।

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