2013-04-29 2 views
5

private_pub를 사용하여 일대일 채팅과 유사한 애플리케이션을 구현하고 있습니다. 여기 Ruby on Rails - Faye Framework - private_pub

내 이야기 ​​: 사용자로, 내 파트너가 채팅을 떠날 때 메시지를 받고 싶습니다 - 창을 닫 등

Faye Monitoring docs 통해 찾고 여기 unsubscribe에 바인딩에서 내 시도는 다음과 같습니다 [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 

하지만


나는 점점 시간 제한을 유지3210

PrivatePub#publish_to으로 전화를 걸면 Rails 또는 private_pub 앱에서 게시 할 때 데이터가 모두 유지되지만 private_pub 앱은 계속 정지됩니다.

private_pub에서 게시하려면 어떻게해야합니까?

+0

이 스레드는 다소 오래되었습니다. 문제가 뭔지 알아 냈어? 나는이 정확한 문제에 많은 시간을 들이지 않고 많은 시간을 보냈다. – Etienne

답변

0

두 번째 바인딩은 unsubscribe 대신 disconnect 이벤트 여야합니다.

또한 브라우저 창을 닫을 때 클라이언트 측 코드에서 Faye/PrivatePub disconnect 이벤트를 실행하는 것을 잊지 마십시오.

참고 : 당신은 페이 서버와하거나이있을 무언가 같이 일반 JS에서 채팅 응용 프로그램의 설계

에 따라 채널 단위로 열려있는 모든 세션에 대해이 작업을 수행해야 할 수 있습니다

window.onbeforeunload = functionThatTriggersFayeDisconnectEvent; 

모바일에서 올린 적절한 마크 업을 사용하지 못해 죄송합니다.

가와 PrivatePub.publish_to channel, { marius_says: 'quitter' } 교체 :

연구와 수많은 시도의 시간 후
+0

탭을 닫을 때'disconnect' 이벤트와'unsubscribe' 이벤트가 모두 자동으로 실행됩니다 - 여기는 [modified private_pub.rb] (https://gist.github.com/mariusbutuc/8cdd6d71e7595a2fb814#file-private_pub-rb)이고 [ 그 출력] (https://gist.github.com/mariusbutuc/8cdd6d71e7595a2fb814#file-private_pub-out). OP의 문제를 해결하지 않는 것 같습니다. –

0

, 이것은 내가 찾은 솔루션이 문제를 우회

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\"}}' &" 

이 비동기 요청을 트리거가 (컬 + &) . 최선의 해결책은 아니지만 작동합니다.