PHP -Ereignisschleife: Eine Waffe für asynchrones Programmieren
Kernpunkte
- PHP -Ereignisschleife ist eine Programmierstruktur, mit der in einem Scheduler Ereignisse oder Nachrichten gewartet werden, insbesondere für die Behandlung asynchroner Vorgänge.
- herkömmliche PHP -Programmierung ist synchron, führt jeweils eine Operation durch und wartet darauf, dass jede Operation abgeschlossen wird, bevor die nächste Operation fortgesetzt wird. Während die Ereignisschleife eine asynchrone Programmierung ermöglicht, bei der ein Vorgang gestartet und anschließend aufgehalten werden kann, bis das Ergebnis fertig ist, können während dieser Zeit andere Vorgänge ausgeführt werden.
- Bibliotheken wie ReactPHP oder AMP bieten die erforderlichen Schnittstellen und Klassen, um PHP -Ereignisschleifen zu erstellen und zu verwalten, um eine bessere Nutzung von Ressourcen und kürzere Reaktionszeiten zu ermöglichen, insbesondere in Anwendungen, die eine große Anzahl gleichzeitiger Verbindungen verarbeiten müssen.
- Während Ereignisschleifen erhebliche Leistungsvorteile bieten können, können sie auch die Komplexität der Anwendung erhöhen, unterschiedliche Programmierstile erfordern und den Code schwieriger zu verstehen und zu debuggen. Nicht alle Aufgaben sind für die asynchrone Verarbeitung geeignet, und einige Aufgaben sind möglicherweise schwieriger zu implementieren.
PHP -Entwickler warten immer auf etwas. Manchmal warten wir auf eine Anfrage nach Remotediensten. Manchmal warten wir darauf, dass die Datenbank Zeilen aus komplexen Abfragen zurückgibt. Wäre das nicht großartig, wenn wir während aller Wartezeiten andere Operationen ausführen könnten?
Wenn Sie einen JS -Code geschrieben haben, sind Sie möglicherweise mit Callbacks und DOM -Ereignissen vertraut. Obwohl wir auch Rückrufe in PHP haben, funktionieren sie nicht genauso. Dies ist einer Funktion namens Event Loop zu verdanken.
Wir werden verstehen, wie Ereignisschleifen funktionieren und wie Ereignisschleifen in PHP verwendet werden.
Wir werden einige interessante PHP -Bibliotheken sehen. Einige Leute glauben, dass diese Bibliotheken nicht stabil genug sind, um in Produktionsumgebungen verwendet zu werden. Einige Leute glauben, dass die hier bereitgestellten Beispiele "vorzugsweise in einer ausgereifteren Sprache implementiert werden". Es gibt viele gute Gründe, diese Methoden auszuprobieren. Es gibt auch gute Gründe, diese Methoden in Produktionsumgebungen zu vermeiden. Der Zweck dieses Artikels ist es, Möglichkeiten in PHP hervorzuheben.
Warteplätze
Um Ereignisschleifen zu verstehen, lassen Sie uns sehen, wie sie im Browser funktionieren. Schauen Sie sich dieses Beispiel an:
function fitToScreen(selector) { var element = document.querySelector(selector); var width = element.offsetWidth; var height = element.offsetHeight; var top = "-" + (height / 2) + "px"; var left = "-" + (width / 2) + "px"; var ratio = getRatio(width, height); setStyles(element, { "position": "absolute", "left": "50%", "top": "50%", "margin": top + " 0 0 " + left, "transform": "scale(" + ratio + ", " + ratio + ")" }); } function getRatio(width, height) { return Math.min( document.body.offsetWidth / width, document.body.offsetHeight / height ); } function setStyles(element, styles) { for (var key in styles) { if (element.style.hasOwnProperty(key)) { element.style[key] = styles[key]; } } } fitToScreen(".welcome-screen");
Dieser Code erfordert keine zusätzlichen Bibliotheken. Es funktioniert in jedem Browser, der die CSS -Zoomumwandlung unterstützt. Die neueste Chrome -Version reicht aus. Stellen Sie einfach sicher, dass der CSS -Selektor den Elementen im Dokument entspricht.
Diese Funktionen erhalten einen CSS -Selektor und einen Zentrum und skalieren die Elemente für den Bildschirm. Was passiert, wenn wir einen Fehler in die für Schleife werfen? Wir werden so etwas sehen ...
wir nennen diese Funktionsliste Stack Trace. So sieht das Innere des Stapels des Browsers aus. Sie werden diesen Code in Schritten verarbeiten ...
Dies ist so, wie PHP den Stapel verwendet, um den Kontext zu speichern. Der Browser geht noch einen Schritt weiter und bietet Webapi für Inhalte wie DOM -Ereignisse und AJAX -Rückrufe. In seinem natürlichen Zustand ist JavaScript asynchron wie PHP. Das heißt: Während beide in der Lage zu sein scheinen, viele Operationen gleichzeitig auszuführen, sind beide eines Threaden. Sie können jeweils nur eine Sache tun.
Mithilfe von Browser -Webapis wie SetTimeout und AddEventListener können wir parallele Arbeiten auf verschiedene Threads abladen. Wenn diese Ereignisse auftreten, fügt der Browser den Rückruf der Rückrufwarteschlange hinzu. Wenn der Stapel beim nächsten Mal leer ist, nimmt der Browser die Rückrufe aus der Rückrufwarteschlange auf und führt sie aus.
Dieser Prozess des Löschens des Stapels und der Anrufen der Warteschlange ist die Ereignisschleife.
Leben ohne Ereignisschleife
In JS können wir den folgenden Code ausführen:
function fitToScreen(selector) { var element = document.querySelector(selector); var width = element.offsetWidth; var height = element.offsetHeight; var top = "-" + (height / 2) + "px"; var left = "-" + (width / 2) + "px"; var ratio = getRatio(width, height); setStyles(element, { "position": "absolute", "left": "50%", "top": "50%", "margin": top + " 0 0 " + left, "transform": "scale(" + ratio + ", " + ratio + ")" }); } function getRatio(width, height) { return Math.min( document.body.offsetWidth / width, document.body.offsetHeight / height ); } function setStyles(element, styles) { for (var key in styles) { if (element.style.hasOwnProperty(key)) { element.style[key] = styles[key]; } } } fitToScreen(".welcome-screen");
Wenn wir diesen Code ausführen, sehen wir außerhalb der Zeitüberschreitung in der Konsole und dann innerhalb des Timeouts. Die SetTimeOut -Funktion ist Teil der vom Browser bereitgestellten Webapi. Nachdem 1 Millisekunde verstrichen ist, fügen sie den Rückruf zur Rückrufwarteschlange hinzu.
Die zweite Konsole.log erfolgt vor dem Beginn der Konsole.log. Wir haben nichts wie SetTimeout in Standard -PHP, aber wenn wir versuchen müssen, es zu simulieren:
setTimeout(function() { console.log("inside the timeout"); }, 1); console.log("outside the timeout");
Wenn wir es ausführen, sehen wir innerhalb des Auszeits und dann außerhalb der Auszeit. Dies liegt daran, dass wir in der SetTimeout -Funktion eine unendliche Schleife verwenden müssen, um den Rückruf nach einer Verzögerung auszuführen.
Es kann verlockend sein, sich während der Schleife außerhalb von SetTimeout zu bewegen und den gesamten Code einzuschließen. Dies kann dazu führen, dass sich unser Code weniger blockiert fühlt, aber irgendwann werden wir immer durch diese Schleife blockiert. Irgendwann werden wir sehen, dass wir jeweils nur eine Sache in einem Thread machen können.
Während es in Standard-PHP nichts anderes als SetTimeout gibt, gibt es dunkle Möglichkeiten, nicht blockierende Code parallel zur Ereignisschleife zu implementieren. Wir können Funktionen wie Stream_Select verwenden, um nicht blockierende Netzwerk-IOS zu erstellen. Wir können C-Erweiterungen wie EIO verwenden, um nicht blockierende Dateisystemcode zu erstellen. Schauen wir uns die Bibliothek an, die auf diesen obskuren Methoden basiert ...
icicle
ICicle ist eine Komponentenbibliothek, die Ereignisschleifen berücksichtigt. Schauen wir uns ein einfaches Beispiel an:
function setTimeout(callable $callback, $delay) { $now = microtime(true); while (true) { if (microtime(true) - $now > $delay) { $callback(); return; } } } setTimeout(function() { print "inside the timeout"; }, 1); print "outside the timeout";
Dies verwendet ICiciceio/ICicle Version 0.8.0
Die Implementierung der Ereignisschleife vonICicle ist großartig. Es hat auch viele andere beeindruckende Funktionen;
ICicle verwendet auch Generatoren als Coroutinen. Generatoren und Coroutinen sind ein anderes Thema, aber der Code, den sie zulassen, ist wunderschön:
use Icicle\Loop; Loop\timer(0.1, function() { print "inside timer"; }); print "outside timer"; Loop\run();
Dies verwendet den Iciciceio/DNS -Version 0.5.0 Generator, um das Schreiben von asynchronem Code ähnlich dem Synchroncode zu vereinfachen. In Kombination mit Versprechen und Eventschleifen produzieren sie einen exzellenten, nicht blockierenden Code wie diesen!
reactPhp
reactPhp hat eine ähnliche Implementierung von Ereignisschleifen, jedoch ohne den interessanten Generatorinhalt:
function fitToScreen(selector) { var element = document.querySelector(selector); var width = element.offsetWidth; var height = element.offsetHeight; var top = "-" + (height / 2) + "px"; var left = "-" + (width / 2) + "px"; var ratio = getRatio(width, height); setStyles(element, { "position": "absolute", "left": "50%", "top": "50%", "margin": top + " 0 0 " + left, "transform": "scale(" + ratio + ", " + ratio + ")" }); } function getRatio(width, height) { return Math.min( document.body.offsetWidth / width, document.body.offsetHeight / height ); } function setStyles(element, styles) { for (var key in styles) { if (element.style.hasOwnProperty(key)) { element.style[key] = styles[key]; } } } fitToScreen(".welcome-screen");
Dies verwendet React/Event-Loop-Version 0.4.1
reactPHP ist reifer als Eiszapfen und hat einen breiteren Bereich von Komponenten. Icicle hat noch einen langen Weg vor sich, um mit allen Funktionen zu konkurrieren, die ReactPHP -Angebote. Entwickler machen jedoch gute Fortschritte!
Schlussfolgerung
Es ist schwierig, die Einstellung mit einem Threaden loszuwerden, für die uns beigebracht wurde. Wenn wir Zugriff auf nicht blockierende APIs und Ereignisschleifen haben, wissen wir nicht, wie viel Code wir schreiben können.
Die PHP -Community muss diese Architektur verstehen. Wir müssen mit asynchroner und paralleler Ausführung lernen und experimentieren. Wir müssen diese Konzepte und Best Practices aus anderen Sprachen stehlen, die seit Jahren Ereignisschleifen haben, bis „wie man die meisten Systemressourcen effektiv nutzt?“
Seien Sie gespannt auf eine praktischere Implementierung des kommenden Eiszapfens!
PHP Event Loop FAQ
Welche Rolle spielt Ereignisschleifen in PHP?
Ereignisschleifen in PHP sind Programmierstrukturen, die zum Warten auf Ereignisse oder Nachrichten in einem Scheduler verwendet werden. Es funktioniert, indem es jedes aktive Ereignis als Reaktion auf externe Stimuli verfolgt und sie nach Fertigstellung plant. Dies ist besonders nützlich in PHP für den Umgang mit asynchronen Operationen, bei denen Sie den Betrieb starten und dann fortsetzen möchten, ohne auf die Abschluss des Betriebs zu warten.
Wie ist der Unterschied zwischen Ereignisschleifen und herkömmlicher PHP -Programmierung?
herkömmliche PHP -Programmierung ist synchron, was bedeutet, dass sie jeweils eine Operation durchführt, in der Reihenfolge, in der es geschrieben wurde, und auf jede Operation warten muss, bevor die nächste Operation fortgesetzt wird. Auf der anderen Seite ermöglichen Ereignisschleifen eine asynchrone Programmierung. Dies bedeutet, dass die Aktion gestartet und dann in die Warteschleife gebracht werden kann, bis das Ergebnis fertig ist, in dem andere Aktionen ausgeführt werden können.
So implementieren Sie Ereignisschleifen in meiner PHP -Anwendung?
Implementieren von Ereignisschleifen in Ihrer PHP -Anwendung beinhaltet die Verwendung von Bibliotheken, die diese Funktionalität liefern, z. B. ReactPHP oder AMP. Diese Bibliotheken bieten die erforderlichen Schnittstellen und Klassen, um Ereignisschleifen zu erstellen und zu verwalten. Sie können diese Ereignisschleife dann verwenden, um asynchrone Aufgaben in Ihrer Anwendung zu erledigen.
Was sind die Vorteile der Verwendung von PHP -Ereignisschleifen?
Die Verwendung von Ereignisschleifen in PHP kann die Anwendungsleistung und die Reaktionsfähigkeit erheblich verbessern. Sie können mehrere Aufgaben gleichzeitig und nicht nacheinander bearbeiten, was dazu führen kann, dass die Ressourcen und kürzere Reaktionszeiten besser verwendet werden. Dies ist insbesondere bei Anwendungen vorteilhaft, bei denen eine große Anzahl gleichzeitiger Verbindungen wie Chat-Server oder Echtzeitdatenfeeds behandelt werden müssen.
Was sind die Nachteile der Verwendung von PHP -Ereignisschleifen?
Während Ereignisschleifen erhebliche Leistungsvorteile bieten können, können sie auch die Komplexität der Anwendung erhöhen. Sie erfordern unterschiedliche Programmierstile und können den Code schwieriger verstehen und debuggen. Darüber hinaus sind nicht alle Aufgaben für die asynchrone Verarbeitung geeignet, und einige Aufgaben sind möglicherweise schwieriger in Ereignisschleifen zu implementieren.
Kann ich Ereignisschleifen mit PHP -Frameworks wie Laravel oder Symfony verwenden?
Ja, Ereignisschleifen können mit PHP -Frameworks wie Laravel oder Symfony verwendet werden, obwohl dies möglicherweise eine zusätzliche Konfiguration erfordert. Beide Frameworks sind so konzipiert, dass sie mit synchronem PHP -Code arbeiten, können jedoch so angepasst werden, dass sie mit Ereignisschleifen arbeiten, um asynchrone Aufgaben zu erledigen.
Wie kann ich in der Ereignisschleife Fehler umgehen?
Fehlerbehandlung in Ereignisschleifen kann komplizierter sein als die Fehlerbehandlung im synchronisierten PHP -Code. Da die Aufgabe asynchron ausgeführt wird, wird der Fehler möglicherweise nicht sofort gefangen. Stattdessen müssen Sie normalerweise eine Rückruffunktion bereitstellen, die aufgerufen wird, wenn ein Fehler auftritt.
Kann ich Ereignisschleifen in PHP -CLI -Skripten verwenden?
Ja, Sie können Ereignisschleifen in Skripten PHP CLI (Befehlszeilenschnittstellen) verwenden. In der Tat ist dies ein häufiger Anwendungsfall für Ereignisschleifen, da CLI -Skripte häufig mehrere Aufgaben gleichzeitig ausgeführt werden müssen.
Wie funktioniert Event Loop mit der Müllsammlung von PHP?
Die Müllsammlung vonPHP funktioniert unabhängig von Veranstaltungsschleifen. Da die Ereignisschleife jedoch Verweise auf alle aktiven Aufgaben behält, werden diese Aufgaben erst nach Fertigstellung Müll erfasst. Dies bedeutet, dass Sie vorsichtig sein müssen, um Speicherlecks im Ereignisschleifcode zu vermeiden.
Kann ich Ereignisschleifen mit einem integrierten Server von PHP verwenden?
Ja, Sie können Ereignisschleifen mit dem integrierten Server von PHP verwenden. Denken Sie jedoch daran, dass ein integrierter Server nicht für Produktionszwecke ausgelegt ist und möglicherweise nicht die gleiche Leistung oder Zuverlässigkeit wie ein dedizierter Webserver bietet.
Das obige ist der detaillierte Inhalt vonEine Einführung in Ereignisschleifen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Lange URLs, die oft mit Schlüsselwörtern und Tracking -Parametern überfüllt sind, können Besucher abschrecken. Ein URL -Verkürzungsskript bietet eine Lösung, die präzise Links erstellt, die ideal für soziale Medien und andere Plattformen sind. Diese Skripte sind für einzelne Websites a wertvoll

Nach seiner hochkarätigen Akquisition durch Facebook im Jahr 2012 nahm Instagram zwei APIs für den Einsatz von Drittanbietern ein. Dies sind die Instagram -Graph -API und die Instagram Basic Display -API. Ein Entwickler, der eine App erstellt, die Informationen von a benötigt

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Die 2025 PHP Landscape Survey untersucht die aktuellen PHP -Entwicklungstrends. Es untersucht Framework -Nutzung, Bereitstellungsmethoden und Herausforderungen, die darauf abzielen, Entwicklern und Unternehmen Einblicke zu geben. Die Umfrage erwartet das Wachstum der modernen PHP -Versio


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Dreamweaver CS6
Visuelle Webentwicklungstools
