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

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

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

我的问题:如何让它成为生产者按下“下一步”按钮时,应用程序刷新/更新所有用户并看到最新的元素? 每个人都需要查看相同的信息 – 而且也很快。

任何帮助赞赏!

谢谢

背风处

您可以使用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或者您可以谷歌它自己

您可以让应用程序每隔5秒轮询一次,或者查看某些内容是否已更改。

另一种选择是使用html推送通知 。

通过这种方式,您的服务器可以向页面上的每个人发送通知,指示已更改的内容。 然后,客户端的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的一部分,并非(完全)所有浏览器都支持。

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

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

  1. Meteor.js
  2. Node.js的

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

  1. AJAX投票
  2. AJAX长轮询
  3. 的WebSockets
  4. 服务器端事件

查看关于以下每种方法的重要主题: 什么是长轮询,Websockets,服务器发送事件(SSE)和Comet? 。 实现的示例也可以在Web上轻松找到。

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

  1. 动作控制器概述:任意数据的实时流媒体
  2. ActionController ::实时截屏video
  3. Action Controller Live的示例实现