Javascript 如何使用ActionController::Live从数据库表中进行流式处理?

Javascript 如何使用ActionController::Live从数据库表中进行流式处理?,javascript,ruby-on-rails,ruby-on-rails-4,real-time,actioncontroller,Javascript,Ruby On Rails,Ruby On Rails 4,Real Time,Actioncontroller,设置:在我的环境中,一个Java程序连续地(比如每秒)向名为reads的PostgreSQL数据库表写入数据 我正在构建一个rails应用程序,它连接到同一个数据库并显示这些读数。这是一张静态显示读数的图片 问题:要查看新的阅读资料,我必须刷新 问题:如何使用ActionController::Live使此页面显示新记录?我想我需要轮询数据库以获取新记录,并更新@reads变量,但我不知道如何更新 以下是控制器.rb的开始部分 class ReadingsController < App

设置:在我的环境中,一个Java程序连续地(比如每秒)向名为
reads
的PostgreSQL数据库表写入数据

我正在构建一个rails应用程序,它连接到同一个数据库并显示这些读数。这是一张静态显示读数的图片

问题:要查看新的阅读资料,我必须刷新

问题:如何使用ActionController::Live使此页面显示新记录?我想我需要轮询数据库以获取新记录,并更新
@reads
变量,但我不知道如何更新

以下是控制器.rb的开始部分

class ReadingsController < ApplicationController                                    
  include ActionController::Live                                                    

  before_action :set_reading, only: [:show, :edit, :update, :destroy]               

  # GET /readings                                                                   
  # GET /readings.json                                                              
  def index                                                                         
    @search = Reading.search(params[:q])                                            
    @readings = @search.result.order('time DESC').paginate(:page => params[:page])
  end 
class readingcontrollerparams[:page])
结束
是它自己的野兽

您不能像正常的控制器/操作那样使用它-它必须与或提供连接。我不相信你能在没有永久联系的情况下让它工作


ActionController::Live

我认为这是可行的:

  • 您可以通过控制器/操作进行连接
  • 保持连接(前端带有web套接字/SSE)
  • 任何更新都会发布到连接(通过ActionController::Live)
我会这样做:


JS

创建SSE侦听器:

#app/assets/javascripts/special_javascript.js
jQuery(document).ready(function() {
  setTimeout(function() {
    var source = new EventSource('/your/action');
    source.addEventListener('refresh', function(e) {
      window.location.reload();
    });
  }, 1);
});

控制器

class ReadingsController < ActionController::Base
  include ActionController::Live

  def create
    response.stream.write "Updated" #-> send updated db stuff
    response.stream.close
  end
end
class ReadingController发送更新的数据库内容
response.stream.close
结束
结束
这将允许您监视数据库中的更改。如果您想用新的数据库信息更新页面,我们必须研究您如何传递数据


实际上,我们强烈建议您使用一种服务来为您处理此问题

这是一个很好的尝试。虽然,这不是我想要的。我喜欢推动者的想法。不过,理想的解决方案不需要互联网连接。