Skip to content

Instantly share code, notes, and snippets.

@mwunsch
Created December 5, 2013 15:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mwunsch/7806912 to your computer and use it in GitHub Desktop.
Save mwunsch/7806912 to your computer and use it in GitHub Desktop.
require 'sinatra'
get '/' do
erb :index
end
get '/events' do
f = File.new("pipe")
content_type 'text/event-stream'
stream do |out|
while f.gets do
out << "event: incoming\n"
out << "data: #{($_)}\n\n"
end
out << "event: eof\n"
out << "data: EOF\n\n"
end
end
__END__
@@ index
<!DOCTYPE html>
<head>
<title>Server-Sent Events</title>
</head>
<body>
<h1>Server-Sent Events</h1>
<dl id="events">
</dl>
<pre id="code">
</pre>
<script>
var ev = new EventSource('/events'),
dl = document.getElementById("events");
ev.addEventListener("incoming", function (e) {
var dt = document.createElement("dt"),
dd = document.createElement("dd");
dt.textContent = new Date();
dd.innerHTML = e.data;
dl.appendChild(dt);
dl.appendChild(dd);
});
ev.addEventListener("eof", function (e) {
console.warn("EOF");
ev.close();
});
ev.onerror = function (e) {
console.error(e);
ev.close();
}
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment