Из того, что я могу понять, вы ищете общий подход, а не конкретный код?
--
SSE
Отправленные сервером события — это технология HTML5. Неважно, используете ли вы Rails или другой фреймворк — они должны просто работать.
Одним из недостатков SSE является то, что они действуют очень похоже на длинный опрос Ajax, что означает, что они отправляют постоянные «пинги» / запросы на ваш сервер, ретранслируя любой ответ, который они находят. И они по-прежнему будут использовать шаблон pub/sub
.
-
Проще говоря, SSE — это когда у вас есть Javascript "прослушиватель событий", который будет прослушивать "конечная точка" (URL). Конечная точка, в случае Rails, будет controller#action
, из которой вы можете отправлять соответствующие text/event-stream
обновления, а это то, что ActionController::Live::SSE
нужно сделать
--
Настройка
#config/routes.rb
resources :your_controller do
collection do
get :endpoint
end
end
#app/assets/javascripts/application.js
var source = new EventSource('your_controller/endpoint');
source.addEventListener('message', function(e) {
console.log(e.data);
}, false);
#app/controllers/your_controller.rb
Class YourController < ActionController::Base
include ActionController::Live
def endpoint
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream, retry: 300, event: "event-name")
sse.write({ name: 'John'})
ensure
sse.close
end
end
Это будет отправлять вам соответствующие обновления каждый раз
person
Richard Peck
schedule
31.07.2014
ActionController::Live::SSE
Rails. - person Richard Peck   schedule 31.07.2014