红宝石纤维和王菲

时间:2012-03-04 11:40:13

标签: ruby eventmachine faye fibers

我有简单的脚本与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',则一切正常。但我需要这种异步。

ruby​​-1.9.2-p290 [x86_64]

1 个答案:

答案 0 :(得分:1)

答案是使用Synchrony ConnectionPool。