2011-08-11 12 views
8

Rails uygulamasında push bildirimleri (sohbet için) için Faye (Rack adapter) kullanıyorum.Faye ile pub/alt raylar

Başka bir kullanım durumu (daha fazla push bildirimi) için Faye'i kullanmak istiyorum ancak bunu anlayamıyorum.

Uygulamamda, model oluşturulduğunda görünümlerimden birini (indeks eylemi) yenilemek istediğim bir arka plan işinden bir model oluşturulabilir.

böylece gibi:

app/modelleri/post.rb

class Post 
    include Mongoid::Document 

    after_create :notify_subscribers 

    private 
    def notify_subscribers 
     Faye::Client.publish("/posts") 
    end 
end 

app// gönderiler/index.html.erb

<%= subscribe_to(posts_url) do %> 
    uhh what do I do here? ajax call to refresh the whole page?? 
<% end %> 

Yani bildirim doğrudan yayınlıyor bir after_create geri dönüşü iyi bir fikir ve Faye sunucusundan bir mesaj aldığımda "update" i uygulamaktan nasıl vazgeçebilirim? Verileri sunucudan tekrar yüklemek için sadece AJAX araması yapıyorum? Bu yavaş olurdu gibi görünüyor.

Ayrıca ben ... iyi bir plan gibi görünmüyor modeline güncellemeler için benzer bir şey (diyelim bir kullanıcı bazı yorumlar eklenebilir veya yazar içeriği değişti) kullanmaları için DB her zaman dayak istiyorum

cevap

5

Her şeyden önce, evet, after_create ile bildirimi yayımlamak gayet iyi. notify_subscribers yönteminde yapmanız gereken, istemcideki kullanmak istediğiniz yeni postayla ilgili tüm bilgileri yayınlamaktır, böylece 'un bildirim alınmadığında başka bir gereksiz AJAX isteğini yapması gerekmez.

Dolayısıyla, örneğin, title ve yazının content kullanıcı hemen görmesini o oluşturulduktan sonra, gibi bir şey yapacağını alakalı olmaları durumunda: Giriş, ardından

def notify_subscribers 
    client = Faye::Client.new('http://localhost:3000/faye') 
    client.publish("/posts/new", { 
    'title' => self.title, 
    'content' => self.content 
    }) 
end 

... ve görünümde, sunucudan aldığınız yeni postayla ilgili verileri kullanmak için jQuery kullanırsınız. Raylar kodu burada size yardımcı olmaz. Örneğin. Bunu (jQuery kullanıyorsunuzdur ve başlığındaki faye.js dahil ettik varsayarak) yapardı:

<script type="text/javascript"> 
$(function() { 
    var client = new Faye.Client('http://localhost:3000/faye'); 
    client.subscribe("/posts/new", function(data) { 
    /* do whatever you need with data */ 
    }); 
}); 
</script> 

Son olarak, aktarmak istediğiniz şekilde bilgi bildirimin parçası olarak aktarmak için çok karmaşık ise, veya görünümünüzü güncellemek için halihazırda var olan AJAX işlemlerine sahipseniz, yalnızca post ID'sini yayınlayabilir ve subscribe geri arama işlevinde jQuery ile bir AJAX çağrısı başlatabilirsiniz. Gerektiğinde sadece bunu tavsiye ederim.

+1

Bunu yapmak için benim Faye yapılandırmaları reddediyor form config.ru Ve 'RuntimeError: eventmachine başlatılamıyor: evma_connect_to_server' her zaman Post nesnesini oluşturmaya çalışıyorum. Sorun nedir? – prikha

+0

@prikha bunu çözmeyi başardınız mı? Ben de aynı problemi yaşıyorum. – Eduardo

+0

@Eduardo Yepp! Uygun yığını kullanmaya başladığınızda her şey gider. Unicorn + İnce. Ve faye yüklerini kullanarak EM. – prikha