2013-07-04 2 views
1

У меня проблема. Я прочитал много тем о stackoverflow об этой проблеме, но ничего не помогло. Я пытаюсь реализовать взаимодействие клиент-сервер через соединение кометы. У меня есть экземпляр, который отвечает за отправку сообщений и экземпляров, которые отвечают за получение сообщений. Процесс следующий: - Отправить экземпляр отправляет запрос GET серверу, сервер отвечает на экземпляр приема. Первый звонок работает отлично, я получаю первый ответ и могу получить нужные мне данные, но следующий запрос не заставит мой callReceiveData вызвать вызов. Но я вижу, что сервер отправил данные, я вижу это в журналах сервера, и я вижу это в wirehark на клиентской машине. Интересно: первый ответ не вызывал мой обратный вызов, прежде чем я добавил «content-length: 0» в ответ. Недокументированная функция NSUrlConnection? Что еще следует рассмотреть, чтобы заставить NSUrlConnection считать, что ответ действительно? Альтернатива: сила для извлечения данных из сокета, но я не знаю, если это возможно с NSURLConnection (люди немы об этом)ios NSURLConnectionDataDelegate didReceiveData callback not called

настойчивый код соединения:

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]; 
+0

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

+0

Это не то, как должен использоваться протокол HTTP. Это протокол с запросом. NSURLConnection может использоваться только для одного запроса-ответа. То, что вы делаете, довольно волосатое. Я не буду рассчитывать на ваши наблюдения. – CouchDeveloper

ответ

0

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

Смежные вопросы