2 Stimmen

Asynchrone Web-Verarbeitung mit Goliath

Ich brauche einen einfachen Webserver, der die URL, die es empfängt, parst, ruft einige andere Ruby-Skripte, die einige schwere Verarbeitung zu tun und danach die resultierende JSON zurück.

Ist Goliath dafür geeignet? Soweit ich sehen kann, werden die Anfragen sequentiell bearbeitet. Was sollte ich tun, um dies richtig zu machen?

class MyServer < Goliath::API
  def response(env)
    res = create_json_response(env["REQUEST_URI"])
    [200, {}, res]
  end
end

4voto

igrigorik Punkte 9083

Ein ausführlicheres Beispiel finden Sie im "echo"-Beispiel: https://github.com/postrank-labs/goliath/blob/master/examples/echo.rb

Goliath lässt Sie absichtlich Ihren Stack aufbauen und versucht, standardmäßig wenig anzunehmen - dies gibt Ihnen die Flexibilität, den Stack zu optimieren, auf Kosten einer gewissen Voreinstellung.

Die Anfragen werden "sequentiell" in dem Sinne bearbeitet, dass sie von einer Ereignisschleife bedient werden. Wenn Sie bei der IO blockiert sind, beginnt Goliath mit der Verarbeitung der nächsten Anforderung. Wenn man sich jedoch entscheidet, eine Weile CPU-intensive Berechnungen durchzuführen, wird der Reaktor blockiert. Mit anderen Worten, dies ist genau das gleiche Verhalten wie jedes andere "ereignisgesteuerte" Framework (Node, etc.).

Wenn Sie eine umfangreiche CPU-Verarbeitung durchführen müssen, sollten Sie diese Arbeit in eine Arbeitswarteschlange oder einen dedizierten Worker auslagern.

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