Javascript 如何使用ActionController::Live从数据库表中进行流式处理?
设置:在我的环境中,一个Java程序连续地(比如每秒)向名为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
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
结束
结束
这将允许您监视数据库中的更改。如果您想用新的数据库信息更新页面,我们必须研究您如何传递数据
实际上,我们强烈建议您使用一种服务来为您处理此问题这是一个很好的尝试。虽然,这不是我想要的。我喜欢推动者的想法。不过,理想的解决方案不需要互联网连接。