suchen
HeimBackend-EntwicklungPHP-TutorialEine Einführung in Ereignisschleifen in PHP

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.

An Introduction into Event Loops in PHP 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 ...

An Introduction into Event Loops in PHP

wir nennen diese Funktionsliste Stack Trace. So sieht das Innere des Stapels des Browsers aus. Sie werden diesen Code in Schritten verarbeiten ...

An Introduction into Event Loops in PHP

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 von

ICicle 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 von

PHP 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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)Mar 03, 2025 am 10:49 AM

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

Einführung in die Instagram -APIEinführung in die Instagram -APIMar 02, 2025 am 09:32 AM

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

Arbeiten mit Flash -Sitzungsdaten in LaravelArbeiten mit Flash -Sitzungsdaten in LaravelMar 12, 2025 pm 05:08 PM

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-

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagierenErstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagierenMar 04, 2025 am 09:33 AM

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

Vereinfachte HTTP -Reaktion verspottet in Laravel -TestsVereinfachte HTTP -Reaktion verspottet in Laravel -TestsMar 12, 2025 pm 05:09 PM

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' =>

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsCurl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsMar 14, 2025 am 11:42 AM

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

12 Beste PHP -Chat -Skripte auf Codecanyon12 Beste PHP -Chat -Skripte auf CodecanyonMar 13, 2025 pm 12:08 PM

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

Ankündigung von 2025 PHP Situation SurveyAnkündigung von 2025 PHP Situation SurveyMar 03, 2025 pm 04:20 PM

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

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

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

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

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools