Я пытаюсь снизить нагрузку на сервер, используя постоянные HTTP-соединения через инфраструктуру Apple CFNetwork.Однако документации об этом мало.Единственная информация, которую я смог найти, заключалась в том, что инфраструктура перерабатывает потоки от имени разработчика, если установлены соответствующие флаги:
CFHTTPMessageRef request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, methodString, url, kCFHTTPVersion1_1);
CFHTTPMessageSetHeaderFieldValue(request, CFSTR("Keep-Alive"), CFSTR("120")); <--- This line
//Set message body if we're posting
if (msDetails.eType == HttpRequestDetails::POST)
{
CFDataRef bodyRef = CFDataCreate(kCFAllocatorDefault, (const UInt8*)msDetails.strBody.c_str(), msDetails.strBody.length());
CFHTTPMessageSetBody(request, bodyRef);
CFRelease(bodyRef);
}
//Create the read stream...
CFReadStreamRef ReadStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, request);
//...use persistent connections..
CFReadStreamSetProperty(ReadStream, kCFStreamPropertyHTTPAttemptPersistentConnection, kCFBooleanTrue); <--- This line
//...enable SSL if the URL is https
if(msDetails.strURL[4] == 's')
{
//Hey an https request
CFMutableDictionaryRef pDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(pDict, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);
CFDictionarySetValue(pDict, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelSSLv3);
CFReadStreamSetProperty(ReadStream, kCFStreamPropertySSLSettings, pDict);
CFRelease(pDict);
}
CFReadStreamOpen(ReadStream);
Приведенный выше код вызывает «внутреннюю ошибку CFNetwork».Если я удаляю вызов CFReadStreamSetProperty (ReadStream, kCFStreamPropertyHTTPAttemptPersistentConnection, kCFBooleanTrue), то я больше не получаю сообщение об ошибке.Стоит также упомянуть, что после завершения чтения данных я закрываю поток чтения, но, возможно, мне нужно самостоятельно управлять пулом потоков?
У кого-нибудь есть какая-либо документация, примеры или руководства, на которые они могут ссылаться?Я стремлюсь продолжать использовать материал CFNetwork, поскольку у нас есть клиент, который настаивает на том, что мы должны минимизировать использование Obj-C.