Umgebung: init_worker_by_lua, set_by_lua, rewrite_by_lua, access_by_lua, content_by_lua, header_filter_by_lua, body_filter_by_lua, log_by_lua, ngx.timer., balancer_by_lua Diese Lua-Tabelle kann zum Speichern anforderungsbasierter Lua-Umgebungsdaten verwendet werden und ihre Lebensdauer entspricht der der aktuellen Anforderung (ähnlich wie bei Nginx-Variablen). Siehe das folgende Beispiel: Standort /Test { umschreiben_durch_lua_block { ngx.ctx.foo = 76 } Zugriff über Lua-Block { ngx.ctx.foo = ngx.ctx.foo + 3 } Inhalt von Lua-Block { ngx.say(ngx.ctx.foo) } } Zugriff auf GET /test-Ausgabe
Das heißt, der Eintrag ngx.ctx.foo bleibt während der Umschreib-, Zugriffs- und Inhaltsverarbeitungsphasen einer Anforderung konsistent. Jede Anfrage, einschließlich Unteranfragen, hat ihre eigene Kopie der ngx.ctx-Tabelle. Zum Beispiel: Standort /sub { Inhalt von Lua-Block { ngx.say("sub vor: ", ngx.ctx.blah) ngx.ctx.blah = 32 ngx.say("Unterbeitrag: ", ngx.ctx.blah) } } Standort /main { Inhalt von Lua-Block { ngx.ctx.blah = 73 ngx.say("Hauptvorspann: ", ngx.ctx.blah) lokale Auflösung = ngx.location.capture("/sub") ngx.print(res.body) ngx.say("Hauptbeitrag: ", ngx.ctx.blah) } } Zugriff auf GET /main-Ausgabe
Hier wirkt sich das Ändern des Eintrags ngx.ctx.blah in der untergeordneten Anforderung nicht auf den gleichnamigen Eintrag in der übergeordneten Anforderung aus, da jeweils eine andere Version von ngx.ctx.blah verwaltet wird. Durch die interne Umleitung werden die ngx.ctx-Daten in der ursprünglichen Anfrage (sofern vorhanden) zerstört und die neue Anfrage verfügt über eine leere ngx.ctx-Tabelle. Zum Beispiel, Standort /neu { Inhalt von Lua-Block { ngx.say(ngx.ctx.foo) } } Standort /orig { Inhalt von Lua-Block { ngx.ctx.foo = "hallo" ngx.exec("/neu") } } Der Zugriff auf GET /orig gibt aus
anstelle des ursprünglichen „Hallo“-Wertes. Beliebige Datenwerte, einschließlich Lua-Closures und verschachtelter Tabellen, können in diese „magische“ Tabelle eingefügt werden, die auch die Registrierung benutzerdefinierter Metamethoden ermöglicht. Es ist auch möglich, ngx.ctx mit einer neuen Lua-Tabelle zu überschreiben, zum Beispiel: Bei Verwendung in einem init_worker_by_lua*-Kontext hat diese Tabelle die gleiche Lebensdauer wie der aktuelle Lua-Handle. Für das Suchen in ngx.ctx-Tabellen sind relativ aufwändige Metamethodenaufrufe erforderlich, die viel langsamer sind als die direkte Weitergabe anforderungsbasierter Daten über die Funktionsargumente des Benutzers. Missbrauchen Sie diese API daher nicht zum Speichern von Benutzerfunktionsparametern, da dies erhebliche Auswirkungen auf die Leistung haben kann. Und versuchen Sie wegen der „Magie“ der Metamethode nicht, ngx.ctx auf „lokaler“ Ebene auf Lua-Modulebene zu verwenden, beispielsweise für die Datenfreigabe auf Worker-Ebene. Das folgende Beispiel ist schlecht: -- meinmodule.lua lokales _M = {} -- Die Datei ngx.ctx in der folgenden Zeile gehört zu einer einzelnen Anfrage, aber die Variable ctx befindet sich auf der Ebene des Lua-Moduls - und gehört einem einzelnen Arbeiter. lokales ctx = ngx.ctx Funktion _M.main() ctx.foo = "Leiste" Ende return _M Stattdessen sollte Folgendes verwendet werden: -- meinmodule.lua lokales _M = {} Funktion _M.main(ctx) ctx.foo = "Leiste" Ende return _M Das heißt, der Anrufer sollte den Aufruf der CTX-Tabelle abschließen, indem er Parameter an die Funktion übergibt. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Anwendungsbeispiele für React Hooks
Was ist Redis Cluster? Redis Cluster ist eine von...
einführen Überwacht die Integrität von HTTP-Serve...
Vor einigen Tagen erhielt eine Kollegin ein Punkt...
erben 1. Was ist Vererbung? Vererbung: Zunächst e...
Inhaltsverzeichnis Was ist LocalStorage Was ist S...
Seit seiner Einführung im Jahr 2009 wird Flex von...
In diesem Artikelbeispiel wird der spezifische Co...
Dieser Artikel zeichnet das grafische Tutorial zu...
1. Hintergrund Im Kontext schneller Updates und I...
[Lösung 1: Padding-Implementierung] Prinzip: Wenn...
Ein Designsoldat fragte: „Kann ich nur reines Des...
Das Prinzip besteht darin, die Methode window.pri...
In diesem Artikel wird der spezifische Code von v...
1. Übersicht 1.1 Grundlegende Konzepte: Docker is...
1. Deinstallieren Sie zuerst npm sudo npm deinsta...