See the specification: https://html.spec.whatwg.org/multipage/server-sent-events.html
Install with Rubygems:
gem install em-eventsource
If you use bundler, add it to your Gemfile:
gem "em-eventsource", "~> 0.3.0"
Basic usage:
require "em-eventsource"
EM.run do
source = EventMachine::EventSource.new("http://example.com/streaming")
source.message do |message|
puts "new message #{message}"
end
source.start # Start listening
end
Listening specific event name:
source.on "eventname" do |message|
puts "eventname #{message}"
end
Handle error:
source.error do |error|
puts "error #{error}"
end
Handle open stream:
source.open do
puts "opened"
end
Close the stream:
source.close
Current status of the connection:
# Can be:
# - EM::EventSource::CLOSED
# - EM::EventSource::CONNECTING
# - EM::EventSource::OPEN
source.ready_state
Override the default retry value (if the connection is lost):
source.retry = 5 # in seconds (default 3)
Get Last-Event-Id value:
source.last_event_id
Attach middleware:
source.use EM::Middleware::JSONResponse
Set the inactivity timeout. Set to 0 to disable the timeout.
source.inactivity_timeout = 120 # in seconds (default: 60).
MIT License
Copyright (C) 2020 François de Metz
Copyright (C) 2011 af83