Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 谷歌应用程序引擎可以用于;检查是否有更新的";和下载二进制文件web服务?_Iphone_Google App Engine - Fatal编程技术网

Iphone 谷歌应用程序引擎可以用于;检查是否有更新的";和下载二进制文件web服务?

Iphone 谷歌应用程序引擎可以用于;检查是否有更新的";和下载二进制文件web服务?,iphone,google-app-engine,Iphone,Google App Engine,我是谷歌应用引擎的新手,如果有任何帮助,我将不胜感激。我有一个iPhone应用程序,它从设备上存储的sqlite db中获取数据 我想建立一个Google App Engine web服务,我的iPhone客户端将与之对话,并检查是否有更新版本的sqlite数据库需要下载 因此,iPhone客户端使用某种版本号/时间戳点击web服务,如果有更新的文件,应用程序引擎将通知客户端,然后客户端将请求下载应用程序引擎将提供服务的新数据库 有没有可能在Google App Engine中设置一个web服务

我是谷歌应用引擎的新手,如果有任何帮助,我将不胜感激。我有一个iPhone应用程序,它从设备上存储的sqlite db中获取数据

我想建立一个Google App Engine web服务,我的iPhone客户端将与之对话,并检查是否有更新版本的sqlite数据库需要下载

因此,iPhone客户端使用某种版本号/时间戳点击web服务,如果有更新的文件,应用程序引擎将通知客户端,然后客户端将请求下载应用程序引擎将提供服务的新数据库

有没有可能在Google App Engine中设置一个web服务来实现这一点?有人能告诉我一些示例代码/教程吗


非常感谢

鉴于您正在进行HTTP请求,这完全可以通过App Engine实现


在我看来,最好的代码和教程是官方的。您需要的一切都在那里。

我要做的是将SQLite DB作为gzip blob保存在数据存储中。将SHA1哈希用作etag。客户机使用etag头执行GET请求,服务器响应304 Not Modified或200以及响应正文中的blob内容

有一个专门针对blob的API,称为blobstoreapi,但要使用它,需要启用计费。在不启用计费的情况下,您仍然可以轻松地为blob提供服务,但每个请求、响应和实体大小将限制为10MB。如果压缩后的数据库大于此值,您可以将下载分解为多个请求,因为您同时控制客户端和服务器代码。仅使用数据存储的自定义blob处理程序可能如下所示:

class MyModel(db.Model):
  body = db.BlobProperty()

class MyBlobHandler(webapp.RequestHandler):
  def get(self):
    entity_key = self.request.get("entity_key")
    entity = MyModel.get(entity_key)
    self.response.headers['Content-type'] = 'what/ever'
    self.response.out.write(entity.body)
  def put(self):
    entity = MyModel(body=db.Blob(self.request.body))
    entity.put()
    self.response.out.write(entity.key())

谢谢,那里有很多我要读的内容。在谷歌文档或其他地方是否有更具体/针对我的问题的内容?我在谷歌上搜索了又搜索,但找不到任何明显的东西。如果不了解你的具体问题,我可能帮不了你。基本上,您只需编写一个HTTP请求来检查是否有新数据库可用,然后再编写一个HTTP请求来下载它。完成一些阅读之后,看起来最快的方法是使用一个python主脚本,一旦调用该脚本,1)返回一个带有sqlite文件日期时间戳的HTTP响应。然后,如果sqlite/binary文件过时,iPhone客户端将下载该文件。对于1),GAE中是否有文件系统,或者我是否必须上载到数据存储,然后使用API检查日期时间戳?我猜同样的问题也适用于2)——如果没有文件系统,我必须使用数据存储,那么可能有一个API来请求二进制文件下载?Drew-谢谢,这很有帮助,让我更详细地检查一下。我的压缩数据库大约是1MB,所以我可以尝试不计费(但如果这意味着要让它工作的话,我很乐意启用计费)。另外,有趣的是,我可以用304或200响应来节省自己到服务器的时间。我会尝试一下,然后回来更新。Drew-我对这个服务器的东西很陌生,但由于你的回答,我已经成功实现了一个GAE,我可以1)将我的zip blob上传到数据存储,2)下载zip,只要我知道实体密钥(例如?entity_key=XXX)。我的最终解决方案需要的是让客户机访问服务器,并知道要下载的更新blob/zip(相对于客户机中已经存在的blob/zip)。每次我传入实体密钥时,都会收到相同的原始blob。我显然做错了什么,我怎么能利用304/200的回报率呢?感谢我的原始示例中没有包含304/200逻辑。基本上,您需要做的是将您选择的唯一标识符附加到数据库的每个版本,如哈希、时间戳或版本号。在响应头中将标识符发送到客户端。当客户端再次请求该文件时,它们应该将标识符传递回请求头中。当您收到请求时,首先检查他们最后的已知版本是否也是最新版本,如果是,则返回HTTP 304,而不是再次为blob提供服务。