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

时间:2011-10-21 02:26:15

标签: iphone sockets networking download

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

以下是设置。

  1. 它们由3000个小文件组成。
  2. 它们是通过tcp bsd socket下载的。
  3. 它们在下载时存储在客户端的数据库中。
  4. 服务器可以将所有必要的文件存储在内存中(服务器端无文件访问)
  5. 我没有看到很多客户端因为服务器端的文件访问而下载了我怀疑的大量文件的情况。
    我还担心多路复用器(select / epoll)会被过多的网络请求处理所淹没。(我需要担心这个吗?)

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

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

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

    我想知道其他有经验的网络人士会对这两种策略说些什么 1.许多小数据
    2.少数大数据和解压。

    修改

    对于有经验的iphone开发人员,我正在使用NSOperationQueue进行数据库操作 NSOperationQueue真的很好吗? 我对它的表现非常怀疑 - 我试过posix线程,没有太大的区别..

1 个答案:

答案 0 :(得分:1)

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

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

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

在我采用faq中的建议加速“多次插入”之后,它实际上优于“多个文件下载单独策略”。