जावास्क्रिप्ट & PHP वेबसाकेट टीसीपी पैकेट क्लंपिंग के बारे में नीचे उदाहरण के साथ।वेबसाकेट टीसीपी पैकेट एक साथ चिपकते हैं?
किसी कारण से, मेरे वीपीएस पर पैकेट भेजते समय, या मेरे आईपी पते पर इंगित डोमेन के माध्यम से मेरे लोकहोस्ट तक पहुंचने पर, कई पैकेट एक साथ मिल जाएंगे। मैं स्ट्रीम करने की कोशिश कर रहा हूं, इस उदाहरण के लिए प्रति सेकंड 20 (@ 100byte) पैकेट। सर्वर अंत में, वे वास्तव में एक स्थिर दर पर भेजा जा रहा है, बिल्कुल हर 50ms, 20 प्रति सेकंड बनाते हैं। हालांकि, जब वे ग्राहक के पास जाते हैं, तो ग्राहक केवल एक सेकंड के प्रत्येक 1/4 वें के बारे में नए संदेश संसाधित करता है। नए पैकेट को केवल प्रति सेकंड 4 या उससे कम की दर से प्राप्त करने के कारण ...
पैकेट के इस क्लैंपिंग को एक साथ क्या कारण बन रहा है? स्थानीय समस्या के माध्यम से सब कुछ तब नहीं होता है। वीयर क्या है कि यह आईफोन की आईओएस मोबाइल सफारी पर आसानी से स्ट्रीम करता है, बिना किसी समस्या के। लेकिन, यह पीसी सफारी पर बिल्कुल काम नहीं करता है, (क्योंकि मैंने इसे पुराने हिक्सी -76 वेबसाकेट प्रारूप के साथ सही तरीके से काम करने के लिए सेट नहीं किया है, मुझे लगता है कि मोबाइल सफारी पहले से ही नए आरएफसी 6455 या नई जावास्क्रिप्ट का उपयोग कर रहा है कंपाइलर) मैंने कई होस्टिंग कंपनियों की कोशिश की है, हर बार सटीक परिणाम के साथ।
नीचे दिए गए उदाहरण, InMotion के VPS पर होस्ट देखें: http://www.hovel.me/script/serverControl.php
(बाईं तरफ [कनेक्ट] क्लिक करें, फिर [देखें खेल] दाईं ओर)।
प्राप्त वर्तमान पैकेट हर बार लगभग 5 कूद जाएगा, क्योंकि प्रत्येक 5 पैकेट एक बार में प्राप्त होते हैं, एक सेकंड के प्रत्येक 1/4 वें। हालांकि, मैंने ऐसे उदाहरण देखे हैं जो पैकेट की निरंतर, त्वरित स्ट्रीम भेज सकते हैं। एक दूसरे के लिए इंतजार करने के लिए इस क्लंपिंग को एक साथ/पैकेट का क्या कारण बनता है?
संपादित: यह Nagle's algorithm के साथ कुछ है, जो एकत्रित करता & छोटे पैकेट एक साथ भेजता हो करना है? मैं PHP में इसे बाईपास करने की कोशिश करने के लिए काम करूंगा। PHP में इस TCP_NODELAY सेट के साथ भी, समस्या अभी भी खड़ी है। यह एक आईफोन पर क्यों काम करता है लेकिन पीसी नहीं अभी भी मुझे फेंक रहा है ...
EDIT: रजिस्ट्री में TCPNoDelay और TcpAckFrequency को सेट करने के लिए यह ठीक करता है, लेकिन मैं प्रत्येक उपयोगकर्ता को ऐसा करने की उम्मीद नहीं कर सकता। एक ग्राहक पक्ष होना चाहिए, रोटी & मक्खन जावास्क्रिप्ट तरीका होना चाहिए।
node.js का उपयोग किए बिना, node.js 'socket.setNoDelay(true) "को दोहराने की कार्यक्षमता कैसे हो सकती है?
यह समझ में आता है, लेकिन रीयलटाइम स्ट्रीमिंग के लिए कुछ भी नहीं है, और वेबसाकेट वर्तमान में यूडीपी का समर्थन नहीं करता है, इसलिए मैं इसके साथ अभी अटक गया हूं। मुझे पता है कि एक कामकाज है, लेकिन PHP के माध्यम से TCP_NODELAY (नागल के एल्गोरिदम को बंद करना) को अभी तक मेरे लिए हल नहीं किया है। आपकी सहायता के लिए धन्यवाद – TheWandererLee