Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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
Ios 从数据源实现提要_Ios_Ruby On Rails_Activerecord - Fatal编程技术网

Ios 从数据源实现提要

Ios 从数据源实现提要,ios,ruby-on-rails,activerecord,Ios,Ruby On Rails,Activerecord,我正在使用ActiveRecordMySQL创建一个带有RubyonRails后端的iOS应用程序 该应用程序能够发布各种类型的媒体(图像、GIF、视频) 任何用户都可以发布,并且带有布尔标志is_private to false的帖子将显示在应用程序上可见的全局提要中(想想Facebook新闻提要) 对于这个全局提要,我需要构建分页和拉刷新 在应用程序方面,我已经构建了网络服务和模型,但我需要加强逻辑,以便为全局提要获取数据 我的问题是: -后端和应用程序通信的通用结构是什么。 -到目前为止,

我正在使用ActiveRecordMySQL创建一个带有RubyonRails后端的iOS应用程序

该应用程序能够发布各种类型的媒体(图像、GIF、视频)

任何用户都可以发布,并且带有布尔标志is_private to false的帖子将显示在应用程序上可见的全局提要中(想想Facebook新闻提要)

对于这个全局提要,我需要构建分页和拉刷新

在应用程序方面,我已经构建了网络服务和模型,但我需要加强逻辑,以便为全局提要获取数据

我的问题是:

-后端和应用程序通信的通用结构是什么。 -到目前为止,我有一个获取初始页面的方法和一个获取从当前最后一项开始的下一页的方法


-当用户滚动时,更多的项目被放入数据源的头部(顶部),从而导致连续性问题,我如何处理这一事实?

具有写入一致性的分页比盲分页更难。分页的基本原理是,您希望加载一个初始集,然后能够从最后一次获取点开始向下移动(通常是回到时间)

两种分页类型:

  • 获取数据源的*顶部,然后获取下一页,然后获取下一页。这种方法的问题是,当项目插入到数据源的顶部时,第2页的定义会移动n个项目(n是自上次获取以来的插入次数)
  • 获取列表的标题并存储从服务器返回的列表中的最后一个id。在下一个请求中(当用户滚动到列表的按钮时),发送最后一个see id,然后过滤到最后一个SEEN id之后的下一个m项**

    第一个请求(GET items.json)返回 响应=[12,11,10,9,8]

    存储最后一个id last_id=response.last

    与下一个请求一起发送(GET items.json?last_id=8) 响应=[7,6,5,4]

    在下山的路上 pull to refresh发送一个请求(GET items.json)来获取列表的标题 [19,18,17,16,15]

    然后提出另一个请求(GET items.json?last_id=15)来填补15和12之间的空白

  • 有趣的问题

    我掌握的最好的信息是关于如何“实时”从后端“接收”数据。我不确定你将如何处理JS滚动机制

    --

    现场直播

    系统的“实时”功能基本上是通过SSE或Websocket(异步连接)传递数据来处理的,以使应用程序看起来像是在“实时”运行

    实际上,“实时”应用程序只不过是那些不断“监听”服务器的应用程序——允许您获取它们发送的任何数据并将其放在JS页面上

    如果您想让“提要”永远保持最新,我建议您使用以下技术之一:


    苏格兰和南方能源公司

    执行此操作的最基本方法是使用HTML5技术,它基本上允许您使用
    文本/流
    内容类型
    将数据从服务器传递到DOM:

    这是处理服务器更新的“本机”方式:

    #app/assets/javascripts/application.js
    var source = new EventSource("your_end_point");
    source.onmessage = function(event) {
        //your data here
    };
    
    这可以通过控制器在轨道侧进行补偿:

    class MyController < ActionController::Base
      include ActionController::Live
    
      def index
        response.headers['Content-Type'] = 'text/event-stream'
        sse = SSE.new(response.stream, retry: 300, event: "event-name")
        sse.write({ name: 'John'})
        sse.write({ name: 'John'}, id: 10)
        sse.write({ name: 'John'}, id: 10, event: "other-event")
        sse.write({ name: 'John'}, id: 10, event: "other-event", retry: 500)
      ensure
        sse.close
      end
    end
    
    class MyController
    苏格兰和南方能源公司的问题是,它们基本上与中国相同;在这种情况下,前端JS将每秒不断发送请求。我不喜欢这个

    --

    WebSocket

    是“实时”连接和接收数据的“正确”方式:


    (来源:)

    它们基本上允许您在前端和服务器之间打开永久连接,这意味着您不必向服务器发送持续的请求。我对WebSocket没有太多经验,但我对WebSocket有经验

    --

    推送器

    我强烈推荐-这是一个第三方websocket系统(我与他们没有任何关系)

    简单地说,它允许您向推送服务发送更新,并在您的系统上读取它们。它省去了为自己的
    websocket
    应用程序提供连接的所有麻烦


    您可以阅读,也可以研究

    我感谢您的回复。从概念上讲,您突出显示的内容是有意义的。除了你放了很多我不需要的关于web套接字和web前端的东西。我的前端将是一个iOS本机应用程序。但是谢谢!这是我一直在寻找的概念性答案。这很有道理。非常感谢。嘿,伙计,我也面临着同样的问题。我没有使用ruby(我使用的是python),但即使你上传了你的服务器代码,这显示了你是如何做到这一点的,请在github上分享链接。非常感谢。