Rails为命令中的所有用户刷新页面

时间:2014-06-13 13:06:44

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

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

我希望制作人能够控制正在运行的顺序,这样他/她基本上就可以有一个' Next' /'返回'按钮,可以循环显示节目的每个元素。通过这种方式,团队可以准确地知道他们所处的服务阶段以及他们需要做什么。

我的问题:我怎样才能让制作人按下' Next'按钮,应用程序刷新/更新所有用户,他们看到最新的元素?每个人都需要查看相同的信息 - 也很快。

任何帮助表示赞赏!

由于

4 个答案:

答案 0 :(得分:0)

您可以使用ajax以恒定的时间间隔对控制器#操作进行轮询并获取更新的视图。

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

答案 1 :(得分:0)

您可以让应用程序每隔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的一部分,并非(完全)所有浏览器都支持。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

  1. Meteor.js
  2. Node.js
  3. 尽管如此,使用rails后端仍然可以完成同样的事情。在这里,您还有很多方法可供选择:

    1. AJAX民意调查
    2. AJAX长轮询
    3. 的WebSockets
    4. 服务器端事件
    5. 查看有关每种方法的重要主题:What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?。实现的例子也很容易通过网络找到。

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

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