Попытка заставить мой контроллер непрерывно срабатывать каждые 60 секунд. (рельсы)

#ruby-on-rails #server-sent-events #actioncable

#ruby-on-rails #отправленные сервером события #actioncable

Вопрос:

Я создаю приложение ticker, которое будет оповещать пользователей на основе данных, которые будут обновляться каждые 60 секунд. Я не хочу, чтобы новые вызовы для передачи данных поступали от клиента, но не знаю, как заставить контроллер непрерывно вызывать свой API и отправлять его клиенту.

  def search
    @price = find_price()
    render json: @price
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    # def setprice
    #   @price = Price.find(params[:id])
    # end

    def request_api()
      response = Excon.get(
        'example.api'
      )

      return nil if response.status != 200
    data = JSON.parse(response.body)
    data['PriceRange']['4']
    end

    def find_price()
      request_api()
    end

    # Only allow a trusted parameter "white list" through.
    def price_params
      params.require(:price).permit(:price)
    end
end
 

Ответ №1:

Короткий ответ заключается в том, что вы не можете сделать это через контроллер, потому что, как только контроллер обрабатывает запрос клиента, он «забывает» о клиенте. То, что вам нужно, — это какое-то решение с возможностью действия. ActionCable — это способ Rails настроить websocket; если у вас есть соединение с websocket, сервер может отправлять обновления каждому клиенту, который к нему подключен.