未调用ios NSURLConnectionDataDelegate didReceiveData回调

ios NSURLConnectionDataDelegate didReceiveData callback not called

本文关键字:didReceiveData 回调 NSURLConnectionDataDelegate ios 调用      更新时间:2023-10-16

我有个问题。我在stackoverflow上读了很多关于这个问题的话题,但都无济于事。我正在尝试通过comet连接实现客户端-服务器通信。我有一个负责发送消息的实例和一个负责接收消息的实例。过程如下:-发送实例向服务器发送GET请求,服务器响应接收实例。第一个调用运行良好,我得到了第一个响应,可以得到我需要的数据,但下一个请求不会触发我的didReceiveData回调。但我看到服务器已经发送了数据,我在服务器日志中看到了它,在客户端机器的wireshark中也看到了它。有趣的是:在我向响应添加"contentlength:0"之前,第一个响应并没有使我的回调触发。NSUrlConnection的无文档功能?我还应该考虑什么来使NSUrlConnection认为响应是有效的?替代方案:强制从套接字中获取数据,但我不知道NSUrlConnection是否可能(男人对此保持沉默)

持久连接代码:

  NSURL* requestUrl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:rq->url.c_str()]];
  NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:requestUrl   cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:600];
  m->connection = [[NSURLConnection alloc] initWithRequest:request delegate:request_delegate() startImmediately:NO];
  [m->connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
                              forMode:NSDefaultRunLoopMode];
  [m->connection start];

nginx服务器需要将header部分的"content length"设置为较大的值,因为客户端会收到数据包,并增加接收到的字节数,在收到header中设置的字节数后,它将不再需要任何响应。省略内容长度部分将阻止委托调用。这就是

的原因