RubyonRails是异步通知iPhone应用程序更新的解决方案吗?

RubyonRails是异步通知iPhone应用程序更新的解决方案吗?,iphone,ruby-on-rails,linux,Iphone,Ruby On Rails,Linux,我开始研究RubyonRails是否会以某种方式帮助解决我的问题 简而言之,我有一个遗留应用程序,它正在读取和写入一组图像。此应用程序还使用sqlite数据库在需要时帮助引用正确的图像文件 我想做的是让iPhone和/或iPad应用程序浏览图像,但也能够看到更新和其他图像,而无需点击刷新按钮;或者使用一个周期计时器 这让我开始研究RubyonRails作为解决方案 我制作了下面的图表来思考我是否走上了正确的道路: 到目前为止,我显然已经有了(遗留的)linux应用程序,它可以生成图像并更新数据库

我开始研究RubyonRails是否会以某种方式帮助解决我的问题

简而言之,我有一个遗留应用程序,它正在读取和写入一组图像。此应用程序还使用sqlite数据库在需要时帮助引用正确的图像文件

我想做的是让iPhone和/或iPad应用程序浏览图像,但也能够看到更新和其他图像,而无需点击刷新按钮;或者使用一个周期计时器

这让我开始研究RubyonRails作为解决方案

我制作了下面的图表来思考我是否走上了正确的道路: 到目前为止,我显然已经有了(遗留的)linux应用程序,它可以生成图像并更新数据库。我还在linux应用程序中嵌入了一个bonjour服务,允许iPhone应用程序连接sqlite数据库中的缩略图并浏览到最新版本。棘手的是,我意识到当数据库被远程更改时,需要启动iPhone应用程序来更新其图像

实际上,我认为使用RubyonRails应用程序,它可以提供RESTful服务来访问全尺寸(加上缩略图)图像,从而允许从sqlite数据库中删除缩略图图像-数据库可能有10000多个条目,因此不希望数据库不必要地增长

任何提示或资源都会很好

谢谢


更新:我再次思考了我问题的措辞。我想我是想弄明白,我是否可以像Rails这样的东西来监控对数据库的更改,而不必以某种方式进行轮询。

一个可能的答案是使用苹果的推送通知服务,它可以在你的应用程序之外工作,这是一个额外的好处


这实际上取决于您希望在应用程序中提供什么。您可以只计划从应用程序到服务器(可能是Ruby应用程序)的请求,因此您可以轮询更新。这可能是最简单的解决方案。

我能想到的最简单的解决方案是对RESTful服务执行操作,从数据库中提取最近修改的日期。定期从iPhone应用程序中查询此信息,然后刷新列表

例如,如果为图像创建脚手架:

rails generate scaffold Image name:string filename:string # fill in the other attributes you need
注意:您必须将旧数据库同步到此Rails表

然后,每个图像对象都会自动创建一个“updated_at”属性

class ImagesController < ApplicationController
  # GET /images
  # GET /images.xml
  def index
    @images = Image.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @images }
    end
  end

  # GET /images/1
  # GET /images/1.xml
  def show
    @image = Image.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @image }
    end
  end

  def newest
    @image = Image.find(:last, :order => :updated_at)
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @image }
    end
  end

  # more methods down here
end
现在,您可以从iPhone应用程序中提取一个XML文件,用此URL描述您最近的图像

http://localhost:3000/images/newest.xml

解析出最近更新的时间,并将其与上次刷新日期进行比较。

使用推送通知是一个好主意,但系统的典型安装不向internet开放。我还没有排除iPhone要求更新的轮询解决方案,但这并不理想,因为任何时候都可能发生变化。再次感谢。您可以设置轮询到您希望的时间间隔。首先我会尝试5或10秒,然后在测试后调整。或者,如果你觉得有点过分,你可以做一个适应性系统,根据以前的民意调查结果,尝试猜测它应该多久进行一次民意调查;-)您不想设置计时器进行投票的原因是什么?正如我在下面提到的,我不确定多久进行一次投票。那我必须每一秒都试试吗?这可能有用,我得试试。这似乎太过分了?正如我在下面对我的答案的评论中所说的,你可以尝试一个较长的值(比如10秒甚至一分钟),然后在感觉没有反应时进行调整。你的解释帮助我解决了这个问题;投票通过答案,谢谢。
http://localhost:3000/images/newest.xml