AppEngine / Python,查询数据库并将多个图像发送到客户端,作为对单个get请求的响应

时间:2010-01-05 01:44:04

标签: python ajax image google-app-engine

我正在App Engine上开发社交网络类型的应用程序,并希望根据单个get请求将多个图像发送到客户端。特别是,当客户端加载页面时,他们应该看到与其帐户关联的所有图像。

我在服务器端使用python,并希望在客户端使用Javascript / JQuery来解码/显示接收到的图像。

困难在于我只想在服务器端执行单个查询(即查询与单个用户关联的所有图像),并将查询产生的所有图像作为单个单元发送给客户端,然后将其分解为单个图像。理想情况下,我想使用类似于JSON的东西,但是虽然JSON似乎允许多个“对象”作为JSON响应发送,但它似乎不能允许发送多个图像(或二进制文件)作为JSON响应。

我是否应该采用另一种方式来解决这个问题,或者我应该考虑采用另一种可能允许我向客户端发送多个图像的技术,以响应单个获取请求?

谢谢你,亲切的问候 亚历山大

4 个答案:

答案 0 :(得分:2)

App Engine部分没有太大问题(只要图像数量和总大小不超过GAE的限制),但用户的浏览器不太可能知道该做什么才能每个GET请求接收多个有效负载 - 这不是网络的工作方式。我想你可以连接所有blob / bytestreams(连同客户端重建它们所需的元数据)并发送 (它仍然必须是来自HTML / CSS / Javascript的单独有效负载你也发送了),只要你可以哄骗Javascript将megablob再次分离成所需的图像(但对于那部分你应该打开一个单独的问题并将其标记为Javascript,因为Python与它几乎无关,并且GAE什么都没有。)

我建议只接受这样一个事实:浏览器(大概是通过ajax,如你在标签中提到的那样)发送多个请求,就像它对WWW上的每个其他网页一样,并专注于优化服务端 - 请求将非常接近,因此您应该使用memcache来保留尚未发送的图像,以避免在GAE应用中存储多个存储请求。< / p>

答案 1 :(得分:1)

作为对Alex的回答的改进,没有必要使用memcache:只需执行一个只有键的查询来获取要发送给客户端的图像的键列表,然后使用db.get()来获取对应于每个图像请求所需密钥的图像。这需要与单个常规查询大致相同的工作量。

答案 2 :(得分:0)

尝试在一个请求中发送所有图像意味着您将非常努力地对抗Web和浏览器技术的一些基本假设。如果您没有真正,非常有说服力的理由这样做,您应该考虑为每个请求提供一个图像。现在已经有效,没有汗水,没有努力,也没有轮子重新发明。

我无法想出一个明智的方式来做你所要求的,但我可以告诉你,你在试图实现你所描述的解决方案时要求痛苦。

答案 3 :(得分:0)

在一次点击中发送所有图像的客户端URL,并在客户端上处理它。这符合协议的设计,仍然只允许您进行一次查询。如果幸运的话,客户端可能会在下一个请求中回传这些请求,但是整洁的事情是,即使它由于某种原因(通常是被破坏的)无法重用连接,它也会工作(最终)代理方式)。

相关问题