AppEngine / Python, запрос к базе данных и отправка нескольких изображений клиенту в ответ на один запрос get - PullRequest
0 голосов
/ 05 января 2010

Я работаю над приложением типа социальной сети на App Engine и хотел бы отправить несколько изображений клиенту на основе одного запроса get. В частности, когда клиент загружает страницу, он должен видеть все изображения, связанные с его учетной записью.

Я использую python на стороне сервера и хотел бы использовать Javascript / JQuery на стороне клиента для декодирования / отображения полученных изображений.

Сложность в том, что я хотел бы выполнить только один запрос на стороне сервера (т. Е. Запрос для всех изображений, связанных с одним пользователем) и отправить все изображения, полученные в результате запроса, клиенту как единый блок. , который затем будет разбит на отдельные изображения. В идеале я хотел бы использовать что-то похожее на JSON, но, хотя JSON, по-видимому, позволяет отправлять несколько «объектов» в виде ответа JSON, он не позволяет передавать несколько изображений (или двоичных файлов). как ответ JSON.

Есть ли другой способ, которым я должен смотреть на эту проблему, или, возможно, другая технология, которую я должен рассмотреть, которая может позволить мне отправлять несколько изображений клиенту в ответ на один запрос на получение?

Спасибо и всего наилучшего Александр

Ответы [ 4 ]

2 голосов
/ 05 января 2010

Часть App Engine не представляет большой проблемы (если количество изображений и общий размер не превышают пределы GAE), но браузер пользователя вряд ли будет знать, что делать, чтобы получать несколько полезных нагрузок на запрос GET - это не совсем так, как работает веб. Я предполагаю, что вы могли бы объединить все BLOB-объекты / потоки (вместе с метаданными, необходимыми клиенту для их восстановления) и отправить , что (это все равно должно быть отдельной полезной нагрузкой от HTML / CSS / Javascript, который вы также отправляет), пока вы можете уговорить Javascript снова разделить мегаблоб на нужные изображения (но для этой части вы должны открыть отдельный вопрос и отметить его Javascript, так как Python не имеет к этому никакого отношения, а GAE - ничего на все).

Вместо этого я бы предложил принять тот факт, что браузер (предположительно, через ajax, как вы упомянули в тегах) будет отправлять несколько запросов, так же, как и на любую другую веб-страницу в WWW, и сосредоточиться на оптимизации обслуживающей стороны - запросы будут очень близки по времени, поэтому вам следует просто использовать memcache, чтобы сохранить еще не отправленные изображения, чтобы избежать множественных запросов на выборку из хранилища в вашем приложении GAE.

1 голос
/ 11 января 2010

В качестве улучшения ответа Алекса нет необходимости использовать memcache: просто выполните запрос только по ключам, чтобы получить список ключей изображений, которые вы хотите отправить клиенту, а затем используйте db.get (), чтобы получить изображение, соответствующее требуемому ключу для каждого запроса изображения. Это требует примерно столько же усилий, сколько и обычный запрос.

0 голосов
/ 05 января 2010

Отправьте клиентские URL-адреса для всех изображений одним попаданием и разберитесь с ним на клиенте. Это согласуется с дизайном протокола и позволяет выполнять только один запрос. Клиент может, если вам повезет, иметь возможность отправить их обратно в следующем запросе, но важно то, что он будет работать (в конце концов), даже если он по какой-то причине не сможет повторно использовать соединение (обычно это не работает прокси в пути).

0 голосов
/ 05 января 2010

Попытка отправить все изображения в одном запросе означает, что вы будете бороться очень трудно против некоторых из основных предположений и веб-браузера технологии. Если у вас нет действительно, действительно веской причины для этого, вам следует рассмотреть возможность доставки одного изображения на запрос. Это уже работает сейчас, без пота, без усилий, без колес изобретенных заново.

Я не могу придумать разумного способа сделать то, что вы просите, но я могу вам сказать, что вы просите боли в попытке реализовать решение, которое вы описываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...