4

redis キューを常に読み取る eventmachine の上に無限ループが必要です。以下は私のコードです。再帰はそれを行う正しい方法ですか?loop doループを試しましたが、そのように機能させることができませんでした。

require 'em-hiredis'

def read
  d = @redis.blpop 'queue', 0
  d.callback do |_, value|
    p value
    read
  end.errback do |e|
    p e
    EM.next_tick { read }
  end
end

EM.run do
  @redis = EM::Hiredis.connect
  read
end
4

1 に答える 1

3

redis pub/sub キューにサブスクライブすることをお勧めします。 https://gist.github.com/957367 本当にループが必要な場合、EM 自体は無限ループです。next_tick を使用してジョブを何度もスケジュールする必要があります。

def read
  d = @redis.blpop 'queue', 0
  d.callback do |_, value|
    EM.next_tick { read }
  end.errback do |e|
    EM.next_tick { read }
  end
 end
于 2012-12-23T06:18:12.277 に答える