2014-11-25 10 views
6

के हेडर और बॉडी के बीच यादृच्छिक विलंबता हम अपने नोड जेएस सर्वर को सरल POST अनुरोध भेजने के लिए NSUrlConnection sendAsynchronousRequest का उपयोग कर रहे हैं। Tcpdumps का विश्लेषण करके, हमने देखा है कि कभी-कभी अनुरोध शीर्षलेख और अनुरोध निकाय को 2 अलग-अलग टीसीपी पैकेट में विभाजित किया जाता है।पोस्ट

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:url]]; 
[request setTimeoutInterval:3]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"]; 
[request setHTTPBody:postData]; 

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler: ^(NSURLResponse *response, NSData *POSTReply, NSError *error) { }]; 

समस्या यह है कि कभी-कभी हेडर सर्वर है, जो हमारे API में एक कनेक्शन खोलता है, और फिर कई सेकंड बाद शरीर पैकेट भेज दिया जाता है के लिए भेजा जाता है। हम हेडर और बॉडी के बीच एक> 1 सेकंड देरी देख रहे हैं, सर्वर पक्ष पर यादृच्छिक रूप से हर सौ अनुरोध। यह हमारे एपीआई पर विलंबता का सबसे बड़ा स्रोत है।

अधिकांश अनुरोधों के लिए, शीर्षलेख और शरीर एक ही आकार (प्रत्येक 200 बाइट्स) के बारे में हैं।

क्या किसी ने इसे पहले देखा है?

+1

मुख्य कतार में http अनुरोध न भेजें। – x4snowman

उत्तर

0

मेरे पास स्विफ्ट एपीआई (NSUrlConnection आदि) पर ठोस अंतर्दृष्टि नहीं है, लेकिन सामान्य रूप से, जबकि HTTP डेटा बड़े आकार के हिस्सों में भेजा जाता है (जो एक पैकेट में 200 बाइट्स को समायोजित कर सकता है), अधिक बारीक निर्णय अंतर्निहित टीसीपी स्तर पर लिया जाता है, जो इन्हें कम आकार के हिस्सों में विभाजित करने का निर्णय ले सकता है।

मैंने इसे विशिष्ट प्लेटफार्मों (जैसे एईक्स) पर नोड (पक्ष के साथ-साथ प्राप्त करने के पक्ष में) में देखा है जहां पैकेट टीसीपी द्वारा अनौपचारिक सीमाओं पर विभाजित होते हैं। टीसीपी विनिर्देशन द्वारा, अनुप्रयोगों को निम्न स्तर या निम्न स्तर के डेटा परिवहन के आकार पर भरोसा नहीं करना चाहिए, यह अंतिम चरण में डेटा अखंडता की गारंटी देता है।

एक संदिग्ध टीसीपी में नागील के एल्गोरिदम की उपस्थिति होगी।

मैं क्लाइंट को किसी अन्य प्लेटफ़ॉर्म (जैसे लिनक्स) में बदलने और व्यवहार की तुलना करने की भी सिफारिश करता हूं, अगर कोड को पोर्ट करना आसान है।

उम्मीद है कि इससे मदद मिलती है।