iOS编程诡异问题-CFNetwork框架下 Keep-Alive的问题
(2013-05-30 15:34:11)
标签:
cfnetworkhttpkeep-aliveit |
keep-alive属性是http 1.1开始被赋予的属性,可以在timeout时间内
让服务端与客户端保持链接,提高效率。但是使用CFNetwork框架(CFHttp),设置 CFHTTPMessageSetHeaderFieldValue (request,
CFSTR("Connection"),
CFSTR("Keep-Alive")); 并不会生效。原因是框架会接管这一属性,所以即使你做了这样的设置,抓包后你可以看到connection的属性还是被设置成了closed,如果需要更改connection的属性,就必须设置CFReadStreamSetProperty(readStream,
kCFStreamPropertyHTTPAttemptPersistentConnection ,
kCFBooleanTrue);
再次抓包,就能看到connection的属性已经是keep-alive了。当然这还没有结束,这句话的意思是在再次打开stream的时候,底层框架会去重用已经存在的连接,所以如果你在处理晚请求就把上一连接关闭就会使这句话变得没有意义。
我们需要把CFReadStreamClose 挪动一下位置,在打开stream后再关掉上一个stream句柄就可以完成重用

加载中…