Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sollte PHP Swoole verwenden?

Warum sollte PHP Swoole verwenden?

藏色散人
藏色散人nach vorne
2019-04-23 11:08:5612157Durchsuche

Ich habe mich in den letzten zwei Monaten mit Swoole beschäftigt und hoffe daher, Swoole mit diesem Artikel mehr Menschen zugänglich zu machen. Obwohl Swoole derzeit möglicherweise als Spielzeug für einige fortgeschrittene PHP-Benutzer positioniert ist, was für Benutzer mit mittlerem und niedrigem Niveau einschüchternd ist und in einigen Anwendungsszenarien auch verwirrt sein kann, ist es eigentlich nicht so schwierig.

Die Selbstvorstellung auf der offiziellen Website von Swoole lautet „Asynchrone PHP-Netzwerkkommunikations-Engine für Produktionsumgebungen“. Erstens ist Swoole ein Netzwerkanwendungsentwicklungstool, das HTTP, TCP, UDP und WebSocket unterstützt.

Es gibt Unterschiede zwischen Swoole und unserer traditionellen PHP-Entwicklung, und es gibt auch Konzepte, die verstanden werden müssen. Wenn Sie zum Entwickeln einige aktuelle Swoole-basierte Frameworks verwenden, ähneln die Entwicklungsgewohnheiten denen der herkömmlichen TP- und LV-Frameworks.

Warum dann Swoole verwenden?

Ich denke, es gibt die folgenden Punkte:

Residenter Speicher, vermeidet Leistungsverluste durch wiederholtes Laden, verbessert die enorme Leistung

Coroutine asynchron, verbessert die gleichzeitige Verarbeitungsfähigkeit für E/A-intensive Szenarien (wie WeChat-Entwicklung, Zahlung, Anmeldung usw.)

Entwickeln Sie bequem HTTP, WebSocket, TCP, UDP und andere Anwendungen und können Sie mit Hardware kommunizieren

PHP Hochleistungs-Microservice-Architektur ist Realität geworden

Residenter Speicher

Derzeit muss das herkömmliche PHP-Framework die Framework-Datei laden und konfigurieren, bevor jede Anfrage verarbeitet wird . operieren. Dies kann zu einer großen Ursache für Leistungsprobleme geworden sein, aber mit Swoole gibt es kein solches Problem, wenn es einmal geladen und viele Male verwendet wird.

Coroutine

Wie in der Abbildung unten dargestellt, handelt es sich um ein Szenario, in dem derselbe Thread gleichzeitige Anforderungen verarbeitet. Beispielsweise muss eine Ihrer Schnittstellen eine andere API aufrufen Schnittstellen oder Lesen und Schreiben Bei großen Dateien spiegeln sich die Vorteile der herkömmlichen synchronen Blockierung und der asynchronen Coroutine wider.

Warum sollte PHP Swoole verwenden?

Detaillierte Erklärung, warum Swoole-Coroutine für I/O-intensive Szenarien geeignet ist

Apropos Coroutinen: Wir müssen zunächst kurz über Prozesse und Threads sprechen. Wie wir alle wissen, Prozesse Es nimmt viele Ressourcen in Anspruch und die Erstellung einer großen Anzahl von Prozessen zur Bearbeitung von Anfragen ist den Gewinn definitiv nicht wert. Es gibt viele Multithread-Anwendungen. Auf der CPU-Ebene führen mehrere Kerne mehrere Aufgaben aus. Sobald zu viele Threads erstellt werden, kommt es zu einem Verlust bei der Thread-Planung.

Coroutine wird auf Single-Thread-Basis implementiert, wodurch die Nutzung von CPU-Ressourcen maximiert werden kann, ohne dass diese beim Warten auf E/A verschwendet werden. Je mehr Coroutinen vorhanden sind, desto mehr Speicher belegen sie, aber im Vergleich zu Prozessen und Threads sind die belegten Ressourcen relativ gering.

Wenn Sie Coroutinen verwenden und auf Szenarien wie das Lesen und Schreiben von Dateien, das Anfordern von Schnittstellen usw. stoßen, werden die Coroutinen automatisch angehalten und die CPU wird anderen Coroutinen zur Ausführung von Aufgaben zur Verfügung gestellt. Dies kann einzelne Aufgaben verbessern. Threaded-CPU-Ressourcenauslastung reduzieren und dadurch die Leistung verbessern.

Coroutine-Codebeispiel:

<?php
use Swoole\Coroutine as co;
 
// 协程
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    // 创建协程
    go(function() use($i){
        co::sleep(1.0); // 模拟请求接口、读写文件等I/O
        echo $i, PHP_EOL;
    });
}
swoole_event_wait();
echo &#39;co time:&#39;, microtime(true) - $time, &#39; s&#39;, PHP_EOL;
 
// 同步
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    sleep(1); // 模拟请求接口、读写文件等I/O
    echo $i, PHP_EOL;
}
echo &#39;sync time:&#39;, microtime(true) - $time, &#39; s&#39;, PHP_EOL;

Ausführungsergebnis:

0
9
8
7
6
5
4
3
2
1
co time:1.0087130069733 s
0
1
2
3
4
5
6
7
8
9
sync time:10.010055065155 s

Wie aus den obigen Ergebnissen ersichtlich ist, erfolgt die Coroutine-Ausführung nicht sequentiell und weist eine höhere Leistung auf. Im Schlaf Die Aufgabe Die Ausführungsrechte des aktuellen Threads werden an andere Coroutinen übergeben.

Http-Dienst erstellen

Tatsächlich ist es nicht so schwierig wie gedacht:

$http = new swoole_http_server("127.0.0.1", 9501);
$http->on(&#39;request&#39;, function ($request, $response) {
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();

Microservice

Tars ist das einheitliche Anwendungsframework TAF (Total Application Framework) der Backend-Logikschicht, das Tencent von 2008 bis heute verwendet. Es unterstützt derzeit die Sprachen C++, Java, PHP und Nodejs. Dieses Framework bietet Benutzern einen vollständigen Satz von Lösungen, die Entwicklung, Betrieb und Wartung sowie Tests umfassen und dabei helfen, ein Produkt oder eine Dienstleistung schnell zu entwickeln, bereitzustellen, zu testen und online zu stellen. Es integriert skalierbare Protokollkodierung und -dekodierung, ein leistungsstarkes RPC-Kommunikationsframework, Namensrouting und -erkennung, Release-Überwachung, Protokollstatistik, Konfigurationsverwaltung usw. Dadurch können Sie mithilfe von Microservices schnell Ihre eigenen stabilen und zuverlässigen verteilten Anwendungen erstellen und erreichen vollständige und effektive Service-Governance.

Wenn es Fehler gibt, weisen Sie sie bitte darauf hin. Ich möchte Swoole wirklich jedem empfehlen!

Das obige ist der detaillierte Inhalt vonWarum sollte PHP Swoole verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yurunsoft.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen