Отправить несколько GZIP-файлов в виде одного http-ответа одновременно - PullRequest
0 голосов
/ 19 сентября 2011

Прежде всего, извините за мой плохой английский. Пожалуйста, позвольте мне сначала объяснить мой сценарий, У меня есть данные, хранящиеся в Memcached как группа данных gzip. Я называю каждый кусок данных. Каждый загружается из базы данных, сжимается и сохраняется в Memcached заранее. это выполняется как процесс подготовки, прежде чем услуга станет доступной. (Для уменьшения нагрузки на базу данных)

Мой серверный код просто извлекает данные gzip из Memcached и затем немедленно возвращает данные gzip.

С точки зрения пользователей, они могут запрашивать любое количество кусков одновременно. Например, предположим, что в Memcached есть 10 блоков, пользователь может запросить один кусок, который в этом случае я могу отправить файл gzip в качестве ответа без каких-либо проблем. Но когда пользователь запрашивает несколько кусков одновременно, я просто не знаю, как иметь дело с этим. Получение нескольких кусков и сжатие их в один файл GZIP не решение Я просто хочу отправить запрошенные файлы gzip одновременно как один запрос.

Сначала я подумал, что я буду загружать данные из базы данных, а затем сохранять их в Memcached не сжимая их. Когда поступит запрос, я получу сохраненные данные в Memcached, а затем сжать его и отправить обратно. Но делать это, безусловно, пустая трата процессора цикл, поскольку сжатие должно выполняться каждый раз, когда создается ответ. Итак, я хочу способ не сжимать их, просто отправьте их обратно немедленно, и браузер все еще понимает что я отправляю.

Если мой вопрос озадачит вас, пожалуйста, дайте мне знать, я постараюсь прояснить его. Потому что я действительно нужна помощь.

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Вам нужно будет придумать некоторый вид контейнера для данных, в основном.Это может быть так же просто, как отправка одного ответа, состоящего из:

  • Длина данных для блока 1
  • Данные для блока 1
  • Длина данных для блока 2
  • Данные для чанка 2

(где, конечно, каждый чанк уже разархивирован).

В качестве альтернативы можно создать zip-файл без сжатия, содержащий несколько«файлы», каждый из которых представляет собой сжатый фрагмент.Это действительно зависит от того, что ваш клиент собирается делать с результатом.Какой является клиентом здесь, точно?

0 голосов
/ 19 сентября 2011

HTTP сам по себе поддерживает сжатие GZIP.Я предлагаю вам использовать его.

...