2012-03-04 2 views
3

나는루비 및 섬유 페이

require "faye" 
require "em-synchrony" 
require "hiredis" 
require 'redis' 
require 'redis/connection/synchrony' 

faye = Faye::Client.new 'http://localhost:9292/faye' 
redis = Redis.new 

EM.synchrony do 

    faye.subscribe('/event_1') do |message| 
    Fiber.new do 
     puts "Event 1 start" 
     user_id = redis.hget 'myhash', message.client_id 
     puts "Event 1 finish" 
    end.resume 
    end 

    faye.subscribe('/event_2') do |message| 
    Fiber.new do 
     puts "Event 2 start" 
     user_id = redis.hget 'myhash', message.client_id 
     puts "Event 2 finish" 
    end.resume 
    end # subscribe 

end #EM.synchrony 

event_1가 먼저 내가 그것을 실행하면
이 이벤트의 해고 (아주 작은 간격) 그것 event_2 다음을 제공 EventMachine, 섬유 및 페이와 간단한 스크립트가 있습니다. 나는 항상 다음과 같은 출력을 가지고있다 :

Event 1 start 
Event 2 start 
Event 2 finish 

그 모두.
이벤트 1은 어디에서 끝나나요?
내가 뭘 잘못하고있어?

UPD : 비동기 제거를 제거하면 require 'redis/connection/synchrony' 모두 잘됩니다. 하지만 비동기가 필요해.

루비 1.9.2-p290 [x86_64에]를

답변

1

대답은 ConnectionPool의 Synchrony를 사용 하였다.