让人头疼的ios 8——GCDAsynSoc…
2016-02-19 09:29
465 查看
众所周知,socket通信有一个缓冲区,正常情况下,异步的socket是不会有socket的阻塞问题发生的,可是这个ios8
却会。因为异步的socket过来的时候,他会先挂起,等到这个缓冲区满了再唤醒,这样就会出现,三四秒recv不到消息,然后三四秒后一股脑的recv好几条消息,这个实在让人有些受不了啊。我们是做股票软件的,服务器推过来的报价,报价快的时候差不多一秒两口,在ios7上的时候,就是很匀速的recv,一口接一口的,而在ios8上的时候就是,是个好几秒一下子过来好几口,就好像攒够一盆水,一下子倒出来一样,这可是个很麻烦的事情啊。这对这个,我试了朋友提供的两个解决办法:①让socket不停的发消息,然后就能让socket就能一直在recv处理消息。②将缓冲区的大小设置小一些,然后就能让它减小阻塞的可能性。我经过验证,这俩方法都不行。
首先第一点,socket发消息跟收消息阻塞有必然联系么?我喜欢用实际代码验证,结果有。但是,这个不可行。你总不能莫名其妙的一直发包,不合逻辑。然后第二点,缓冲区设小一点,我依旧是用demo验证,而且确实有效,在8上,缓冲区的大小对于socket的阻塞影响极大,如果我将缓冲区设为100M,他大概1分钟才才收到报价,并且是一堆报价,然后试了各种size,然后发现真的是这个原因,虽然原因定位好了,但是解决办法却并不可行。首先,这个报价的数据包是小的,可是其他的数据的数据包有大包啊,一个完整包放不下的缓冲区必然面临崩溃啊,事实上改了项目中的缓冲区为8M
然后确实闪退了,原因就是缓冲区溢出了。然后我只能选择一个既能接受socket阻塞,又能容纳最大的完整包的size,然后差强人意的解决了问题,但这个问题的研究还在继续,我相信我一定能找到更好的办法,来处理这个的。
这里只提供一个解决思路,具体代码实现,需要了解的可以给我留言喔。
却会。因为异步的socket过来的时候,他会先挂起,等到这个缓冲区满了再唤醒,这样就会出现,三四秒recv不到消息,然后三四秒后一股脑的recv好几条消息,这个实在让人有些受不了啊。我们是做股票软件的,服务器推过来的报价,报价快的时候差不多一秒两口,在ios7上的时候,就是很匀速的recv,一口接一口的,而在ios8上的时候就是,是个好几秒一下子过来好几口,就好像攒够一盆水,一下子倒出来一样,这可是个很麻烦的事情啊。这对这个,我试了朋友提供的两个解决办法:①让socket不停的发消息,然后就能让socket就能一直在recv处理消息。②将缓冲区的大小设置小一些,然后就能让它减小阻塞的可能性。我经过验证,这俩方法都不行。
首先第一点,socket发消息跟收消息阻塞有必然联系么?我喜欢用实际代码验证,结果有。但是,这个不可行。你总不能莫名其妙的一直发包,不合逻辑。然后第二点,缓冲区设小一点,我依旧是用demo验证,而且确实有效,在8上,缓冲区的大小对于socket的阻塞影响极大,如果我将缓冲区设为100M,他大概1分钟才才收到报价,并且是一堆报价,然后试了各种size,然后发现真的是这个原因,虽然原因定位好了,但是解决办法却并不可行。首先,这个报价的数据包是小的,可是其他的数据的数据包有大包啊,一个完整包放不下的缓冲区必然面临崩溃啊,事实上改了项目中的缓冲区为8M
然后确实闪退了,原因就是缓冲区溢出了。然后我只能选择一个既能接受socket阻塞,又能容纳最大的完整包的size,然后差强人意的解决了问题,但这个问题的研究还在继续,我相信我一定能找到更好的办法,来处理这个的。
这里只提供一个解决思路,具体代码实现,需要了解的可以给我留言喔。
相关文章推荐
- 让人头疼的ios 8——reachabili…
- 编译iOS程序时的-all_load选项,以及-all_load 导致的 ld duplicate symbol xx的问题
- 线程间的通信 iOS
- 详解iOS应用开发中Core Data数据存储的使用
- iOS Block循环引用精讲
- iOS 中枚举的使用
- iOS及Mac开源项目和学习资料【超级全面】
- iOS内存管理和优化 from 刘延军
- iOS打包导出时出现Missing iOS Distribution signing identity问题
- iOS开发ARC内存管理技术要点
- 网易新闻iOS版使用的18个开源组件
- IOS Socket 学习
- iOS开发探索-正则表达式
- ios图片格式转换
- iOS 归档 解档使用总结
- iOS之 isa 指针
- iOS 8 AutoLayout与Size Class自悟
- iOS 界面上绘制不同字体 颜色 大小的字符串
- iOS-全部开发证书无效
- nios中SDRAM时序约束的方法