2

설치 : 제 환경에서는 Java 프로그램이 readings이라는 PostgreSQL 데이터베이스 테이블에 지속적으로 말합니다. 매초마다.ActionController :: Live를 사용하여 데이터베이스 테이블에서 스트리밍하는 방법은 무엇입니까?

동일한 데이터베이스에 연결하고 그 판독 값을 표시하는 레일 앱을 제작 중입니다. 다음은 정적으로 표시되는 판독 값의 그림입니다.

문제 : 새로운 수치를 보려면 새로 고침해야합니다.

enter image description here

질문 :가 어떻게 ActionController :: 라이브이 페이지 쇼 새 레코드를 만들기 위해 사용할 수 있습니까? 나는 새로운 레코드를 위해 데이터베이스를 폴링하고 @readings 변수를 업데이트해야한다고 생각하지만 어떻게해야할지 모르겠다.

여기는 readings_controller.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 

답변

0

ActionController::Live이의 짐승 자신의

당신은 정상 컨트롤러/액션처럼 사용할 수 없습니다 - 그것은 연결을 제공하기 위해 SSE's 또는 web sockets와 함께 작동한다. 나는 영원한 연결

Excellent resource


ActionController ::

나는이 작업을 볼 수있는 방법 라이브를하지 않고도 작업을 얻을 수 있다고 생각하지 않는 것은 :

  • 컨트롤러/작업을 통해 연결하십시오.
  • 연결이 주입니다.


    JS

    : tained은 (웹 소켓/SSE는 프런트 엔드)
  • 모든 업데이트 내가 이런 짓을 했을까

(ActionController :: 라이브를 통해) 연결에 게시

#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); 
}); 
:

SSE 리스너 만들기


컨트롤러

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

    def create 
    response.stream.write "Updated" #-> send updated db stuff 
    response.stream.close 
    end 
end 

이것은 당신이 DB의 변화를 모니터링 할 수 있습니다.새 DB 정보 페이지를 업데이트하기 위해 찾고 있다면, 우리는 당신이

를 통해 데이터를 전달하는 방법을 우리는 매우

+0

이 당신을 위해 이것을 처리하기 위해 Pusher라고 권장하는 서비스가 실제로 거기에보고해야합니다 좋은 시도입니다. 그것은, 내가 찾고있는 것이 아닙니다. 나는 Pusher 아이디어를 좋아한다. 하지만 이상적인 솔루션은 인터넷 연결이 필요하지 않습니다. –