Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 邮件头和正文之间的随机延迟_Ios_Iphone_Node.js_Express_Nsurlconnection - Fatal编程技术网

Ios 邮件头和正文之间的随机延迟

Ios 邮件头和正文之间的随机延迟,ios,iphone,node.js,express,nsurlconnection,Ios,Iphone,Node.js,Express,Nsurlconnection,我们使用NSUrlConnection sendAsynchronousRequest向我们的节点JS服务器发送简单的POST请求。通过分析tcpdump,我们注意到有时请求头和请求体被分成两个独立的TCP数据包 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:url]]; [request setTimeoutInterval:3];

我们使用NSUrlConnection sendAsynchronousRequest向我们的节点JS服务器发送简单的POST请求。通过分析tcpdump,我们注意到有时请求头和请求体被分成两个独立的TCP数据包

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秒,在服务器端每100个请求就随机出现一次。它是API上最大的延迟源

对于大多数请求,头和正文的大小大致相同(每个200字节)


以前有人见过吗?

我对swift API(NSUrlConnection等)没有具体的了解,但一般来说,虽然HTTP数据是以大数据块(一个数据包可以容纳200字节)的形式发送的,但在底层TCP级别会做出更精细的决策,他们可能会决定把这些东西分成更小的块

我在特定平台(如AIX)上的节点(发送端和接收端)中观察到了这一点,在这些平台上,数据包被TCP以不合逻辑的边界分割。根据TCP规范,应用程序不应该依赖于底层数据传输的特定顺序或大小,它保证了最后阶段的数据完整性

一个怀疑是TCP中存在Nagile算法

如果很容易移植代码,我还建议将客户端更改为另一个平台(如Linux),并比较其行为


希望这有帮助。

不要在主队列中发送http请求。