Slide 1

Slide 1 text

faye czyli łatwe pub/sub z websockets

Slide 2

Slide 2 text

faye wiadomości pub/sub serwer: node.js / ruby (rack) backend: ram / redis klient: ruby / js fallback do long-polling

Slide 3

Slide 3 text

faye: archite ktura

Slide 4

Slide 4 text

faye + redis

Slide 5

Slide 5 text

private_pub gem dla Rails ułatwia używanie Faye prywatne kanały dwa tryby publikowania: json, eval

Slide 6

Slide 6 text

liveblogs tworzenie livebloga wysyłanie wiadomości wyświetlanie livebloga

Slide 7

Slide 7 text

1 # Run with: rackup faye.ru -s thin -E production 2 require "yaml" 3 require "faye" 4 begin 5 require "private_pub" 6 rescue LoadError 7 require "bundler/setup" 8 require "private_pub" 9 end 10 11 PrivatePub.load_config("config/private_pub.yml", ENV["RAILS_ENV"] || "development") 12 run Faye::RackAdapter.new(:mount => "/faye", :timeout => 45, :extensions => [PrivatePub.faye_extension]) faye.ru

Slide 8

Slide 8 text

1 development: 2 server: "http://localhost:9292/faye" 3 secret_token: "secret" 4 test: 5 server: "http://localhost:9292/faye" 6 secret_token: "secret" 7 production: 8 server: "http://liveblogs.code-fu.pl:9292/faye" 9 secret_token: "sekret ;)" config/private_pub.yml

Slide 9

Slide 9 text

1 class Stream 2 include Mongoid::Document 3 include PrivatePub::ViewHelpers 4 5 belongs_to :user 6 embeds_many :messages 7 ... 24 25 def create_message_and_publish(author, message) 26 if self.active 27 m = self.messages.create(a: author, m: message) 28 publish_to "/streams/#{self.id}", m.to_json 29 end 30 end 31 end app/models/stream.rb

Slide 10

Slide 10 text

1 = subscribe_to "/streams/#{@stream.id}" 2 3 %ul#stream 4 .new_messages 5 .previous_messages 6 - @messages.each do |message| 7 = render 'liveblogs/message', :message => message 8 9 :javascript 46 PrivatePub.subscribe("/streams/#{@stream.id}", function(data, channel) { 47 data = jQuery.parseJSON(data); 48 $(".new_messages").prepend("
  • " + 49 data.t.slice(11,16) + "\n" + 50 "" + data.a + "\n" + 51 data.m + "
  • ").children(":first").hide().fadeIn('slow'); 52 }); app/views/liveblogs/show.html.haml

    Slide 11

    Slide 11 text

    demo

    Slide 12

    Slide 12 text

    publish_to + render <% publish_to "/messages/new" do %> $("#chat").append("<%= escape_javascript render(@messages) %>"); <% end %>

    Slide 13

    Slide 13 text

    pytania? http://faye.jcoglan.com/ https://github.com/ryanb/private_pub http://liveblogs.code-fu.pl/ http://speakerdeck.com/u/grk/p/faye