#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, сервер может отправлять обновления каждому клиенту, который к нему подключен.