हाल ही में, मैंने WP.N की आम रिलीज में पेश की गई System.Net.Sockets क्लास का उपयोग करना शुरू कर दिया है और आम तौर पर इसका आनंद ले रहा है, लेकिन सामान्य रूप से फोन पर चल रहे डीबग मोड बनाम डेटा में डेटा ट्रांसमिट करने की विलंबता में असमानता देखी है।धीमा/लगी विंडोज़ फोन 7 (WP7) टीसीपी सॉकेट ट्रांसमिशन कैसे करें?
मैं एक "रिमोट कंट्रोल" ऐप लिख रहा हूं जो वाईफाई के माध्यम से मेरे लैन पर एक स्थानीय सर्वर पर एक बाइट ट्रांसमिट करता है क्योंकि उपयोगकर्ता ऐप में एक बटन टैप करता है। एर्गो, एप की कथित प्रतिक्रिया/समयबद्धता एक अच्छे उपयोगकर्ता अनुभव के लिए बेहद महत्वपूर्ण है।
यूएसबी केबल के माध्यम से अपने पीसी से जुड़े फोन और डीबग मोड में ऐप चलाने के साथ, टीसीपी कनेक्शन जैसे ही उपयोगकर्ता बटन टैप करता है, पैकेट को ट्रांसमिट करने लगता है।
पीसी से डिस्कनेक्ट किए गए फोन के साथ, उपयोगकर्ता 7 बटन तक टैप कर सकता है (और इस प्रकार सभी 7 बाइट भेजे जाने से पहले 1 बाइट पेलोड के साथ केस 7 "भेजें"।) यदि उपयोगकर्ता एक बटन टैप करता है और इंतजार करता है नल के बीच थोड़ा, 1 सेकंड की विलंबता प्रतीत होता है।
मैंने सेटिंग सॉकेट की कोशिश की है.नहीं सही और गलत दोनों के लिए, और ऐसा कोई फर्क नहीं पड़ता।
यह देखने के लिए कि क्या चल रहा था, मैंने पैकेट स्निफर का उपयोग किया ताकि यह देखने के लिए कि ट्रैफ़िक कैसा दिख रहा था।
जब फोन पीसी (जो एक वाईफाई कनेक्शन का उपयोग कर रहा था) को USB के माध्यम से जुड़ा हुआ था, प्रत्येक व्यक्ति बाइट अपने स्वयं के पैकेट में था अलग ~ 200 मि.से स्थान दिया गया है जा रहा है।
जब फोन अपने स्वयं के वाईफाई कनेक्शन (यूएसबी से डिस्कनेक्ट) पर काम कर रहा था, बाइट्स के पास अभी भी अपने पैकेट थे, लेकिन वे सभी 4 या 5 पैकेट के विस्फोटों में एक साथ समूहित हुए थे और प्रत्येक समूह ~ 1000ms से अलग था अगला।
बीटीडब्ल्यू, सर्वर पर मेरे वाईफाई नेटवर्क पर पिंग टाइम्स मेरे लैपटॉप से मापा जाने वाला कम 2ms है।
मुझे एहसास है कि बफरिंग "भेजता है" शायद फोन को ऊर्जा बचाने की अनुमति देता है, लेकिन क्या इस "देरी" को अक्षम करने का कोई तरीका है? ऐप की प्रतिक्रिया शक्ति बचाने से अधिक महत्वपूर्ण है।
आप के लिए एक समाधान मिला इस? नागले एल्गोरिदम उत्तर की तरह लगता है। मैं यह जानने के लिए माइक्रोसॉफ्ट से संपर्क कर रहा हूं कि TCP_NODELAY सेटिंग क्यों विंडोज फोन पर नागल को अक्षम नहीं करती है। या, देखकर कि मैंने जो वर्कअराउंड पोस्ट किया है वह टीसीपी कतार को फ्लश करता है। सबसे अच्छा संबंध है, –
मुझे यह जोड़ना चाहिए कि मेरे वाईफाई रेडियो को बंद करके और मेरे फ़ायरवॉल पर एक खुले बंदरगाह के माध्यम से, मेरे टीसीपी सर्वर पर डेटा को सेलफ़ोन के डेटा कनेक्शन से बाहर कर दिया गया था। कोई देरी नहीं हुई थी, लेकिन जाहिर है कि यह कोई समाधान नहीं है क्योंकि यह आपके निजी लैन पर कुछ नियंत्रित करने के उद्देश्य को हरा देता है (हमले के लिए खुद को छोड़ने का उल्लेख नहीं करना चाहिए।) – Pretzel