Обратный вызов ios NSURLConnectionDataDelegate didReceiveData не вызывается

У меня проблема. Я прочитал много тем на stackoverflow об этой проблеме, но ничего не помогло. Я пытаюсь реализовать связь клиент-сервер через кометное соединение. У меня есть экземпляр, который отвечает за отправку сообщений, и экземпляр, который отвечает за получение сообщений. Процесс следующий: - Экземпляр отправки отправляет запрос GET на сервер, сервер отвечает на экземпляр получения. Первый вызов работает нормально, я получаю первый ответ и могу получить нужные мне данные, но следующий запрос не запускает мой обратный вызов didReceiveData. Но я вижу, что сервер отправил данные, я вижу это в журналах сервера и вижу это в wirehark на клиентской машине. Интересная вещь: первый ответ не запускал мой обратный вызов до того, как я добавил в ответ «длина содержимого: 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];

person dp_    schedule 04.07.2013    source источник
comment
решено: хитрость заключалась в том, что серверу необходимо установить длину содержимого раздела заголовка на что-то большое, потому что клиент получает пакеты и увеличивает количество полученных байтов, а после получения количества байтов, установленных в заголовке, он больше не будет принимать ответы. Отсутствие раздела длины содержимого приведет к блокировке вызовов делегатов. Это было причиной.   -  person dp_    schedule 04.07.2013
comment
Это не то, как следует использовать протокол HTTP. Это протокол запрос-ответ. NSURLConnection можно использовать только для одного действия типа запрос-ответ. То, что вы делаете, довольно волосато. Я бы не стал рассчитывать на ваши наблюдения.   -  person CouchDeveloper    schedule 04.07.2013


Ответы (1)


Сервер nginx должен установить в разделе заголовка «длина содержимого» что-то большое, потому что клиент получает пакеты и увеличивает количество полученных байтов, а после получения количества байтов, указанного в заголовке, он больше не будет принимать ответы. Отсутствие раздела длины содержимого приведет к блокировке вызовов делегатов. Это было причиной

person dp_    schedule 06.12.2013