Rails 4, EventSource & Unicorn

W Railsach 4 pojawił się ActionController::Live dzięki czemu po nawiązaniu połączenia serwer może przesyłać strumieniowo dane.

Stwórzmy prostą aplikację, która będzie otrzymywać dane od serwera i dodawać je do listy na stronie.
Tworzymy nową aplikację railsową:

rails new app

Przechodzimy do pliku Gemfile i dodajemy:

gem 'unicorn'

Instalujemy wszystkie zależności:

bundle install

Do pliku config/routes.rb dodajemy:

  get '/' => 'items#index'
  get '/stream' => 'items#stream'

Tworzymy app/controllers/items_controller.rb i dodajemy:

class ItemsController < ApplicationController
  include ActionController::Live

  def index
  end

  def stream
    response.headers['Content-Type'] = 'text/event-stream'
    (1 .. Float::INFINITY).lazy.each do |i|
      response.stream.write "data: #{i}\n\n"
      sleep 0.1
    end
    response.stream.close
  end
end

Tworzymy plik app/assets/javascripts/stream.js i dodajemy:

var source = new EventSource('/stream');

source.onmessage = function(event) {
  var item = $('<li>').text(event.data);
  $('#items').append(item);
}

Tworzymy plik app/views/items/index.html.erb i dodajemy:

<ul id="items"></ul>

Uruchamiamy serwer: unicorn_rails i przechodzimy na stronę http://localhost:8080

Posted on 28/06/2013, in Ruby. Bookmark the permalink. Dodaj komentarz.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: