2011-03-23 10 views
7

मेरे पास क्लाइंट सर्वर आर्किटेक्चर है जो विंडोज 7 के तहत अवरुद्ध सॉकेट के साथ सी ++ में कार्यान्वित किया गया है। सब कुछ लोड के एक निश्चित स्तर तक अच्छी तरह से चल रहा है। यदि कुछ क्लाइंट (उदा।> 4) डेटा के मेगाबाइट प्राप्त या भेज रहे हैं, तो कभी-कभी एक क्लाइंट के साथ संचार लगभग 5 सेकंड तक जम जाता है। अन्य सभी ग्राहक उस मामले में अपेक्षित काम कर रहे हैं।सॉकेट आरईवी कॉल लगभग थ्रेड फ्रीज करता है। 5 सेकंड

बफर आकार 8192 बाइट्स और सर्वर साइड पर लॉग इन करने के रूप में पढ़ता:

टाइमस्टैम्प (s.ms) - प्राप्त बाइट्स

...

1299514524.618 - 8192

1299514524,618 - 8192

1299514524.618 - 0004

1299514529,641 - 8192

1299514529,641 - 3744

1299514529,641 - 1460

1299514529,641 - 1460

1299514529,641 - 8192

...

ऐसा लगता है कि केवल 5 बाइट्स को उस 5 सेकंड में पढ़ा जा सकता है। इसके अलावा मुझे पता चला कि ठंडा समय हमेशा 5 सेकंड के आसपास रहता है - कभी 4 या उससे कम नहीं और कभी 6 या अधिक नहीं ...

कोई विचार? , टीसीपी डेटा कभी कभी पिछले दूसरे से पहले तक पहुँच के अंतिम पैकेट के रूप में डिफ़ॉल्ट ढेर पैकेज के लिए निर्धारित नहीं है:

सादर

माइकल

+0

में उपलब्ध है एक ही धागे या अलग धागे पर इन 'recv' कॉल के सभी कर रहे हैं? क्या आपके पास धागे पर कतारबद्ध कोई एपीसी है? –

+0

ये सभी आरईवी कॉल एक ही धागे से संबंधित हैं। मैं pthreads का उपयोग कर रहा हूँ, लेकिन मेरे पास एक ही व्यवहार है यदि सर्वर पक्ष पर प्रश्नों को इकट्ठा करने के लिए केवल एक धागा का उपयोग किया जाता है। – michael

+0

मुझे एक ही समस्या है। मुझे "winsock 5 सेकंड" के लिए Google खोजकर आपकी पोस्ट मिली। मेरे पास एक परीक्षण प्रोग्राम है जो स्थानीय सर्वर (127.0.0.1) के साथ पूर्ण गति से डेटा और दोनों दिशाओं में डेटा का आदान-प्रदान करता है। जो मैंने पाया वह है कि हर कुछ सेकंड, यादृच्छिक, recv() ब्लॉक लगभग लगभग 5 सेकंड (+ - 1ms) के लिए।इस समय के दौरान सीपीयू निष्क्रिय हो जाता है, 5 सेकंड के बाद 100% पर लौटता है। अब तक मैं कोई समाधान नहीं ढूंढ पाया है। – Barnett

उत्तर

0

मैं उच्च लोड की स्थिति में इस समस्या को मिला है सॉर्टिंग, यह विकार जो आप वर्णन करते हैं उसके समान परिणाम प्राप्त करने के कारण होता है।

अपनाया गया समाधान था: अधिक सर्वरों में लोड वितरण

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