4 Stimmen

Wie man eine Endlosschleife in EventMachine implementiert

Ich muss eine Endlosschleife oben auf EventMachine haben, die ständig eine Redis-Warteschlange liest. Unten ist mein Code. Ist Rekursion der richtige Weg, um es zu tun? Ich habe versucht loop do Schleife, aber auf diese Weise konnte ich es nicht zum Laufen bringen.

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

3voto

Sergii Mostovyi Punkte 1273

Besser ist es, sich für die Redis-Pub/Sub-Warteschlange anzumelden. https://gist.github.com/957367 Wenn Sie wirklich eine Schleife benötigen, ist EM selbst eine Endlosschleife, Sie müssen Ihren Job einfach immer wieder mit next_tick planen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X