2013-04-29 11 views
5

. İşte Yakut Raylar üzerinde - Faye Framework - Ben bire-bir sohbet benzeri bir uygulama uygulamak için private_pub kullanıyorum private_pub

benim hikayem: Bir kullanıcı olarak, ben eşim sohbet ayrıldığında bir ileti almak istiyorum - pencereyi kapatır vb

Faye Monitoring docs içinden bakıldığında burada unsubscribe bağlayıcı benim girişimi: [ERROR] [Faye::RackAdapter] Timeout::Error

:
# Run with: rackup private_pub.ru -s thin -E production 
require "bundler/setup" 
require "yaml" 
require "faye" 
require "private_pub" 
require "active_support/core_ext" 

Faye::WebSocket.load_adapter('thin') 

PrivatePub.load_config(File.expand_path("../config/private_pub.yml", __FILE__),  ENV["RAILS_ENV"] || "development") 

wts_pubsub = PrivatePub.faye_app 

wts_pubsub.bind(:subscribe) do |client_id, channel| 
puts "[#{Time.now}] Client #{client_id} joined #{channel}" 
end 

wts_pubsub.bind(:unsubscribe) do |client_id, channel| 
    puts "[#{Time.now}] Client #{client_id} disconnected from #{channel}" 
    PrivatePub.publish_to channel, { marius_says: 'quitter' } 
end 

run wts_pubsub 

ama


ben alıyorum zaman aşımı tutmak

PrivatePub#publish_to içine Meraklı, veri ne beklemek tutan hem ben Rails veya private_pub uygulamasından yayın değilim, ama private_pub uygulama asılı tutar zaman.

nasıl işe private_pub gelen yayın alabilirim?

+0

Bu başlık biraz yaşlı; sorunun ne olduğunu anladın mı? Bu kesin problem üzerinde fazla bir başarı olmadan saatler geçiriyorum. – Etienne

cevap

0

Kişisel ikinci bağlama disconnect olay yerine unsubscribe olmalıdır.

Ayrıca tarayıcı penceresi kapatıldığında istemci tarafı kodunda bir Faye/PrivatePub disconnect olayı ateşlemesi unutmayın.

Not: Sen Faye sunucusu ile ya da sadece bu olabilir gibi bir şey düz JS sohbet uygulamanın tasarımına

bağlı olarak kanal bazında bir kanaldaki tüm açık oturumlar için bunu yapmak gerekebilir:

window.onbeforeunload = functionThatTriggersFayeDisconnectEvent; 

mobil dan yayınlama, doğru işaretlemeyi kullanmayan için üzgünüm.

ile PrivatePub.publish_to channel, { marius_says: 'quitter' } yerine:

araştırma ve çok sayıda denemeden saat sonra
+0

Sekme kapatılırken hem "bağlantıyı kes" ve "aboneliği iptal et" etkinlikleri otomatik olarak tetiklenir - burada [değiştirilmiş private_pub.rb] (https://gist.github.com/mariusbutuc/8cdd6d71e7595a2fb814#file-private_pub-rb) ve [ çıktısı] (https://gist.github.com/mariusbutuc/8cdd6d71e7595a2fb814#file-private_pub-out). OP'nin sorununu çözmüyor gibi görünüyor. –

0

bu buldum çözüm sorunu atlar

system "curl http://localhost:9292/faye -d 'message={\"channel\":\"#{channel}\", \"data\":{\"channel\":\"#{channel}\",\"data\":{\"message\":{\"content\":\"#{client_id} disconnected from this channel.\"}}}, \"ext\":{\"private_pub_token\":\"ADD_APPROPRIATE_SECRET_HERE\"}}' &" 

Bu zaman uyumsuz bir istek tetikler (kıvırmak + &) . En iyi düzeltme değil ama işe yarıyor.

İlgili konular