3

EventMachine、Fibers、fayeを使った簡単なスクリプトがあります

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があります(非常に短い間隔)
それを実行してイベントが発生したとき。私はいつもこの出力を持っています:

Event 1 start
Event 2 start
Event 2 finish

それで全部です。
イベント1はどこで終了しますか?
私が間違っているのは何ですか?

UPD:非同期を削除するとrequire 'redis/connection/synchrony'、すべてを削除するとうまくいきます。しかし、私はこの非同期が必要です。

ルビー-1.9.2-p290[x86_64]

4

1 に答える 1

1

答えは、SynchronyConnectionPoolを使用することでした。

于 2012-06-26T13:07:21.263 に答える