यह एक पुरानी समस्या है जिसे मैंने थोड़ी देर पहले छोड़ा था क्योंकि मुझे कोई समाधान नहीं मिला और यह केवल एक सर्वर को प्रभावित कर रहा था (इसलिए मैंने अपनी सेवा कहीं और रखी है)।.NET रनटाइम में टीसीपी बफरिंग ब्रेकेज
- सी # .net तुल्यकालिक TCP सर्वर
- एक TcpClient वस्तु AcceptTcpClient विधि
- एक बार वहाँ एक TcpClient वस्तु है के साथ एक TcpListener पर अवरुद्ध करके असाइन किया गया है: उपयोगकर्ता This मेरा के समान लक्षणों के साथ एक समस्या है , मैं इसे एक थ्रेड पर पास करता हूं जो नेटवर्कस्ट्रीम
- बनाने के लिए क्लाइंट की गेटस्ट्रीम विधि को आमंत्रित करता है, यह नेटवर्कस्ट्रीम एक नेटवर्क स्ट्रीम करने वाले प्रत्येक पुनरावृत्ति में लूप हो गया है। रीड (कुछ बफर, 0, 4096)
- अभी क्लाइंट और सर्वर एक ही नेटवर्क पर, कोई भीड़ के साथ
- की बात करने के लिए अपने सर्वर
- अतिरिक्त स्मृति के बहुत सारे है कि अगर मैं एक और मशीन पर अपने सर्वर सॉफ्टवेयर लोड स्थित हैं, समस्या दूर हो जाने
- किकर: एक नेटवर्क लिनक्स बॉक्स के यातायात ठीक से और समय पर हो जाता है
एक समय में एक मिनट के आसपास के लिए tcpClient.AcceptTcpClient()
विधि ब्लॉक, सर्वर में जिसके परिणामस्वरूप को पढ़ने के लिए होने थोड़ी देर बाद बाइट्स का एक बड़ा ब्लॉक, इसके बजाय इसे क्या करना चाहिए। इसे नेटवर्कस्ट्रीम करना चाहिए। बाइट्स के छोटे ब्लॉक जितनी बार भेजे जाते हैं (और क्लाइंट उन्हें हर 5s भेजता है, एक मिनट में नहीं)।
अन्य उपयोगकर्ता को पिछली टिप्पणियों का सुझाव है कि उपपर नेटवर्किंग या कनेक्टिविटी के मुद्दों को दोषी ठहराया जा सकता है, जो पहले उचित लगता है। लेकिन यह वास्तव में मामला नहीं है।
मैं एक कदम आगे गया और क्लाइंट और सर्वर दोनों में पैकेट विश्लेषक स्थापित किया। परिणाम:
- तत्काल ग्राहक एक भेजता है यह सर्वर के विश्लेषक पर दिखाई देता है
- नेटवर्क विलंबता या कनेक्टिविटी समस्या
- पैकेट/फ्रेम सही समय पर सर्वर में आ रहे हैं नहीं कर रहे हैं
- मेरे इंटरफ़ेस की निगरानी करने वाले नेटवर्क इंटरफ़ेस कार्ड के बीच कहीं और मेरा एप्लिकेशन कुछ इस देरी का कारण बन रहा है
- .NET रनटाइम मेरे एप्लिकेशन और नेटवो के बीच एकमात्र चीज है rk इंटरफ़ेस
- .NET में सॉकेट त्रुटि किसी तरह इस विशाल विलंबता का कारण है
पर्यावरण:
-
मेरी विशिष्ट मामले में
- मैं एक इंटेल प्रो/1000 उपयोग कर रहा हूँ एमटी नेटवर्क कार्ड, और .NET
- मानक संस्करण सर्वर 2003 R2, SP2
- .NET Frameworks स्थापित: 2.0 SP2, 3.0 SP2, 3।5 एसपी 1, 4 क्लाइंट प्रोफाइल, 4 विस्तारित
यदि किसी के पास कोई सलाह है तो मुझे यह जानना बहुत पसंद होगा कि यह क्या है।
आप समवर्ती अनुरोधों से कैसे निपट रहे हैं? यानी क्या आप प्रति क्लाइंट, या कुछ और थ्रेड फेंकते हैं? , और जब ऐसा होता है, तो यह डिबग करने में सहायक हो सकता है कि उस समय कितने समवर्ती ग्राहक जुड़े हुए हैं (यह सुनिश्चित करने के लिए कि आप उस सीमा को मार नहीं रहे हैं जहां कई मृत/टूटे हुए क्लाइंट घूमते हैं, यह केवल किसी को पोर्ट कर सकता है अपने ऐप में धागे के टन की आग लगाने के लिए स्कैनिंग) – nos
@nos एक एकल प्रविष्टि बिंदु है और अद्वितीय क्लाइंट को अपनी अनूठी टीसीपी क्लाइंट ऑब्जेक्ट असाइन की जाती है, जो नेटवर्कस्ट्रीम की आने वाली सामग्री को संसाधित करने के लिए अपना स्वयं का धागा मिलता है। पढ़ें()। तो हाँ, प्रति ग्राहक 1 थ्रेड, कुछ ग्राहकों के साथ अचूक भविष्य के लिए सेवा का उपयोग कर। और परीक्षण में केवल 1 ग्राहक जुड़ा हुआ है। –
ओएस स्टैक और आपके एप्लिकेशन के बीच किसी मुद्दे के अलावा मैं केवल एक चीज सोच सकता हूं जो तार पर भेजे गए पैकेट हेडर में कुछ है। अधिक विशिष्ट होने के लिए, शायद पीएसएच बिट टीसीपी हेडर में सेट नहीं किया गया है, जहां यह विफल रहता है। आप एक सर्वर पर एक पैकेट स्नीफ चलाने का प्रयास कर सकते हैं जो काम करता है और जो करता है। फिर दोनों की तुलना करें और देखें कि क्या कोई अंतर है या नहीं। –