【问题标题】:Rails Refresh Page For All Users On Command所有用户的 Rails 刷新页面命令
【发布时间】:2014-08-04 01:25:08
【问题描述】:

我正在寻找创建一个 Rails 应用程序,该应用程序将用作概述我当地教会的服务/活动的运行顺序的程序。基本概念是控制声音、灯光、视觉等的技术团队和志愿者可以登录应用程序并查看运行顺序,其中将包含服务的所有元素,包括时间等。

我希望制作人能够控制运行顺序,以便他/她基本上有一个“下一步”/“返回”按钮,并且可以循环播放节目的每个元素。这样,团队都可以确切地知道他们处于服务的哪个阶段以及他们需要做什么。

我的问题:我怎样才能使制作者按下“下一步”按钮时,应用程序会为所有用户刷新/更新,并且他们会看到最新的元素?每个人都需要查看相同的信息 - 而且速度也很快。

任何帮助表示赞赏!

谢谢

【问题讨论】:

    标签: jquery ruby-on-rails ajax refresh pjax


    【解决方案1】:

    您可以使用任一 ajax 以固定间隔轮询您的控制器#action 并获取更新的视图。

    或者,您可以使用 Web 套接字,它会自动轮询浏览器中的更改。当您的服务器发生更改时,您会将更改推送到客户端浏览器。 见https://github.com/html5hacks/html5hacks/blob/master/source/_posts/2013-04-21-push-notifications-to-the-browser-with-server-sent-events.markdown 或者你可以自己google一下

    【讨论】:

      【解决方案2】:

      您可以让应用程序每 5 秒轮询一次,或者检查是否发生了变化。

      另一种选择是使用html push notifications

      这样,您的服务器可以向页面上的每个人发送通知,指示发生了一些变化。然后,客户端的 javascript 将处理这样的通知。 它看起来像这样。

      if (!!window.EventSource) {
        var source = new EventSource('my_stream');
      }
      
      source.addEventListener('message', function(e) {
        if(e.data.page_changed) {
          // Update the page accordingly
        }
      }, false);
      

      请注意,推送通知是 html5 的一部分,并非所有浏览器都(完全)支持。

      【讨论】:

        【解决方案3】:

        这将是对 socket.io (http://socket.io/) 的完美使用。 客户端可以告诉服务器向所有其他客户端广播刷新命令。

        【讨论】:

          【解决方案4】:

          好吧,你已经为你的问题分配了jqueryajax 标签,所以我假设你理解 Rails 只是一个后端解决方案,不能处理客户端更新本身(至少,之前到 Rails 4)。如果您的任务就像您描述的那样简单并且非常依赖于所有用户的即时更新,我建议切换到一些 JavaScript 平台,因为它们是为此类任务而发明的。最受欢迎的是:

          1. Meteor.js
          2. Node.js

          尽管如此,同样的事情仍然可以用 rails 后端来完成。在这里,您还有很多可供选择的方法:

          1. AJAX 轮询
          2. AJAX 长轮询
          3. 网络套接字
          4. 服务器端事件

          查看有关每种方法的精彩主题:What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?。实施示例也很容易在网络上找到。

          这些方法中的大多数都需要一些客户端编码,但是,Rails 4 的新功能可以减少它的数量:使用ActionController::LiveActionController::Streaming 的服务器端事件。以下资源可能会有所帮助:

          1. Action Controller Overview: Live Streaming of Arbitrary Data
          2. ActionController::Live screencast
          3. Sample Implementation of Action Controller Live

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-15
            • 1970-01-01
            • 2021-11-14
            • 2014-03-14
            • 2019-12-17
            • 2011-02-02
            相关资源
            最近更新 更多