2011-09-19 77 views
0

首先感谢我糟糕的英语。请让我首先解释我的场景, 我将数据存储在Memcached中作为一组gzip数据。我打电话给每一块数据。 每个从数据库加载,预先压缩并存储在Memcached中。在服务可用之前,这个 是作为准备过程完成的。 (为了减少数据库的负载)同时发送多个GZIP作为单个http响应

我的服务器代码然后只是从Memcached中提取gzip数据,然后立即返回gzip数据。

从用户的角度来看,他们可以同时请求任意数量的块。 例如,假设Memcached上有10个块,用户可以请求一个块,在这种情况下,我可以发回一个gzip文件作为响应,没有任何问题。 但是当一个用户同时请求多个数据块时,我根本不知道如何处理这个数据块 。获取多个块并将它们压缩为单个GZIP文件不是解决方案。我简单地想要将请求的gzip文件作为单个请求同时发送。

我的第一个想法是,我将从数据库中加载数据,然后将它们存储在 Memcached中,而不压缩它们。当有请求进入时,我会在 Memcached中获得存储的数据,然后将其压缩并发送回去。但是这样做肯定会浪费CPU周期,因为每次创建响应时都必须进行压缩。所以我想要一个 的方式不压缩他们,只是立即发回他们,浏览器仍然明白我发送的内容为 。

如果我的问题困扰你,请让我知道我会尽力阐述它。因为我真的 需要帮助。

+0

[如何连接两个或多个gzip文件/流](http://stackoverflow.com/questions/1143270/how-to-concat-two-or-more-gzip-files-streams) – cHao

回答

1

基本上你需要拿出一些种容器格式的数据。这可能是作为发送由单个响应简单:数据的

  • 长度为块1
  • 数据块数据的1
  • 长度为块2
  • 数据块2

(当然,每个块已经被gzip压缩)。

或者,您可以创建一个不压缩的zip文件,以包含多个“文件”,其中每个文件都是一个压缩块。这实际上取决于你的客户将如何处理结果。什么这里的客户,究竟是什么?

+0

首先,感谢Jon的快速回复。客户端是一个普通的Web浏览器。至于你提出的第一种方法,我不确定 –

+0

@ s4510488:如果客户端是一个普通的Web浏览器,那么你需要考虑如何让结果出现给用户。这听起来像一个zip文件可能是最好的选择。 –

+0

第一个评论是无意中没有完成,但似乎你明白我在问什么。据我了解,当浏览器收到MIME类型为gzip的响应时,它只是解压并解析zip文件中的内容并将其呈现给用户,不是吗?我不确定浏览器是否可以理解gzip中的gzip。 –

0

HTTP本身支持gzip压缩。我建议你使用它。