Subsecciones

Ejemplo Simple

Donde

app.rb

[~/local/src/ruby/sinatra/sinatra-streaming/jquery-streaming(master)]$ cat app.rb 
require 'sinatra'
require 'pp'

set :server, :thin

get '/' do
  send_file "index.html"
end

get '/bottles' do
  content_type "text/event-stream"
  stream do |out|
    0.upto(50) do |i|
      out << "id: #{i}\n"
      out << "data: #{i} bottle(s) on a wall...\n\n"
      sleep 0.3
    end
    out << "data: CLOSE\n\n"
  end
end

index.html

[~/local/src/ruby/sinatra/sinatra-streaming/jquery-streaming(master)]$ cat index.html 
<!DOCTYPE html>
<html>
  <head>
    <title>Sinatra streaming example</title>
    <meta charset="utf-8" />
    <script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
    <style>body {font-family: sans-serif;}</style>
 </head>
  <body>
    <h1>Welcome to this Sinatra Streaming example!</h1>
    <input id="bottles-button" type="button" value="Bottles!"/>
    <pre id="bottles-output">
    </pre>
    <script>
      $("#bottles-button").click(function() {
        var src = new EventSource('/bottles?foo=bar');
        src.onmessage = function(e) {
          console.log(e)
          $('#bottles-output').append("\n" + e.data)
          if ( e.data == 'CLOSE' ) src.close()
        };
      });
    </script>
  </body>
</html>

Véase



Casiano Rodriguez León 2015-01-07