下载多个文件与单个一个大文件并通过套接字解压缩

eug*_*ene 6 sockets iphone networking download

我需要我的客户端下载价值30Mb的文件.

以下是设置.

  1. 它们由3000个小文件组成.
  2. 它们是通过tcp bsd socket下载的.
  3. 它们在下载时存储在客户端的数据库中.
  4. 服务器可以将所有必需的文件存储在内存中.(服务器端无文件访问)

我没有看到许多客户端下载如此大量文件的情况,我怀疑这是由于服务器端的文件访问.
我还担心多路复用器(select/epoll)会被过多的网络请求处理所淹没.(我需要担心这个吗?)

由于上述怀疑,我将3000个文件压缩为30个文件.(总体大小变化不大,因为文件已经是压缩文件(png))

测试显示,下载3000个文件比下载和解压缩30个文件快25%.
我怀疑这是因为客户端设备在解压缩和插入数据库时​​无法下载,我正在手持设备上进行测试.. iPhone ..
(我已将线程解压缩+数据库操作与网络代码分开,但数据库操作似乎接管了整个系统.我描述了一下,解压缩不需要很长时间,数据库插入就行了.在服务器端,文件被压缩并预先放在内存中.)

我正在考虑切换回3000个文件下载,因为它对客户来说更快.

我想知道其他经验丰富的网络人士会说两种策略,
1.许多小数据
2.少量大数据和解压缩.

编辑

对于有经验的iphone开发人员,我正在使用NSOperationQueue进行数据库操作.
NSOperationQueue实际上是否很好?
我对它的表现非常怀疑.
- 我试过posix线程,没有显着差异..

eug*_*ene 1

我正在回答我自己的问题。

事实证明,在客户端中一次将许多图像插入到sqlite DB中需要很长时间,因此传输中的网络数据包无法足够快地传递到客户端。

http://www.sqlite.org/faq.html#q19

在我采纳了常见问题解答中加速“多次插入”的建议后,它实际上优于“多个文件单独下载策略”。