मैं एक Xbox 360 devkit (जो विंसॉक का उपयोग करता है) पर बड़ी संख्या में छोटी फ़ाइलों को डाउनलोड करने के लिए एक एफ़टीपी-जैसे प्रोग्राम विकसित कर रहा हूं, और इसे प्लेस्टेशन 3 (एक डेकिट, और लिनक्स का उपयोग करता है) पर पोर्ट कर रहा हूं AFAIK)। कार्यक्रम बीएसडी-शैली सॉकेट (टीसीपी) का उपयोग करता है। दोनों कार्यक्रम एक ही सर्वर के साथ संवाद करते हैं, उसी डेटा को डाउनलोड करते हैं। इस तरह एक पाश में सभी फ़ाइलों के माध्यम से कार्यक्रम दोहराता:विंसॉक और लिनक्स सॉकेट के बीच अंतर
for each file send(retrieve command) send(filename) receive(response) test response receive(size) receive(data)
360 कार्यान्वयन पर, पूरे डाउनलोड 1:27 लेता है, और समय पिछले भेजने के बीच और पहले प्राप्त लगभग 14 सेकंड लेता है। यह मेरे लिए काफी उचित लगता है।
प्लेस्टेशन 3 कार्यान्वयन उसी डेटा के लिए 4:01 लेता है। बाधा आखिरी प्रेषण और पहली बार प्राप्त होती है, जो उस समय 3:43 लेती है। नेटवर्क और डिस्क टाइम्स दोनों Xbox 360 से काफी कम हैं।
ये दोनों devkits मेरे पीसी के समान स्विच पर हैं, जो फ़ाइल की सेवा करता है, और कहा स्विच पर कोई अन्य ट्रैफिक नहीं है।
मैंने TCP_NODELAY
ध्वज सेट करने का प्रयास किया है, जिसने चीजों को महत्वपूर्ण रूप से नहीं बदला है। मैंने SO_SNDBUF
/SO_RCVBUF
से 625KB को सेट करने का भी प्रयास किया है, जिसने समय को महत्वपूर्ण रूप से प्रभावित नहीं किया है।
मुझे लगता है कि अंतर विंसॉक और लिनक्स के बीच टीसीपी/आईपी स्टैक कार्यान्वयन के बीच है; क्या कोई सॉकेट विकल्प है जिसे मैं लिनक्स कार्यान्वयन को विंसॉक की तरह व्यवहार करने के लिए सेट कर सकता हूं? क्या कोई और चीज है जिसके लिए मैं लेखांकन नहीं कर रहा हूं?
एकमात्र समाधान इसे फिर से लिखना प्रतीत होता है ताकि यह सभी फ़ाइल अनुरोधों को एक साथ भेज सके, फिर उन सभी को प्राप्त करता है।
दुर्भाग्यवश, सोनी के कार्यान्वयन में TCP_CORK विकल्प नहीं है, इसलिए मैं यह नहीं कह सकता कि यह अंतर है या नहीं।
आप कौन से एफ़टीपी मोड का उपयोग कर रहे हैं, निष्क्रिय या सक्रिय? इसके अलावा, आप कहते हैं "अंतिम प्रेषण और पहली बार प्राप्त होने के बीच का समय लगभग 14 सेकंड लगता है। यह मेरे लिए काफी उचित लगता है।" मुझे आश्चर्य है कि आरईटीआर कमांड के जवाब के लिए 14 सेकंड का इंतजार उचित है, खासकर जब यह PS3 के लिए लंबा है। – Alexander