TIL about Streaming and Server Sent Event
by @rinas
Streaming
class MyController < ActionController::Base include ActionController::Live def stream response.headers['Content-Type'] = 'text/event-stream' 100.times { response.stream.write "hello world\n" sleep 1 } ensure response.stream.close end end
Server Sent Events
class MyController < ActionController::Base include ActionController::Live def index response.headers['Content-Type'] = 'text/event-stream' sse = SSE.new(response.stream, retry: 300, event: "event-name") sse.write({ name: 'John'}) sse.write({ name: 'John'}, id: 10) sse.write({ name: 'John'}, id: 10, event: "other-event") sse.write({ name: 'John'}, id: 10, event: "other-event", retry: 500) ensure sse.close end end
Example Usage of EventSource in JavaScript:
https://developer.mozilla.org/en-US/docs/Web/API/EventSource
https://developer.mozilla.org/en-US/docs/Web/API/EventSource