Analyse asynchroner Aufgaben beim Swoole-Lernen

不言
Freigeben: 2023-04-03 06:10:02
Original
2499 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Analyse asynchroner Aufgaben für das Swoole-Lernen vor. Jetzt kann ich ihn mit Ihnen teilen.

Was ist eine asynchrone Aufgabe?

1. Übermitteln Sie die aktuelle Aufgabe asynchron an den TaskWorker-Prozesspool zur Ausführung, ohne dass sich dies auf nachfolgende Transaktionen auswirkt.
Zum Beispiel:

Analyse asynchroner Aufgaben beim Swoole-Lernen

Bei einigen Aufgaben, die viel Zeit in Anspruch nehmen, kann diese Lösung
unabhängig von Leistung oder Leistung übernommen werden. Die Benutzererfahrung ist viel komfortabler als bei der herkömmlichen Methode

Test

web_server.php

$server = new swoole_websocket_server("0.0.0.0", 8811);
$server->set(
    [
        'task_worker_num' => 2,//设置异步任务的工作进程数量,可以根据任务的耗时和任务量配置适量的task进程。
    ]
);

$server->on('message', function ($server, $frame) {
    echo 'fd为: '.$frame->fd.'发送了:'.$frame->data."\n";
    //投递异步任务
    $task_id = $server->task($frame->fd);
      echo "我们继续访问\n";
});


$server->on('task', function ($server, $task_id, $from_id,$data) {
    for ($i=1; $i finish($data);
});

//处理异步任务的结果
$server->on('finish', function ($server, $task_id, $data) {
    echo 'fd为:'.$data.',task为:'.$task_id.'任务完成的时间是:'.date('Y-m-d H:i:s')."\n";
});


$server->start();
Nach dem Login kopieren

Client-JS-Code

    var url='ws://你的ip地址:8811';
    var websocket =new WebSocket(url);

websocket.onopen = function (evt) {
    console.log("Connected to WebSocket server.");
    websocket.send('客户端:建立链接成功');
};

websocket.onclose = function (evt) {
    console.log("Disconnected");
};

websocket.onmessage = function (evt) {
    console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {
    console.log('Error occured: ' + evt.data);
};
Nach dem Login kopieren

Öffnen wir zuerst web_server,
Öffnen Sie dann zwei Clients über den Browser. Um die Prozesse zu unterscheiden, habe ich die beiden Clients im Abstand von einigen Sekunden geöffnet.

Schauen Sie sich zu diesem Zeitpunkt das Terminal an. Wichtige Punkte Hier ist es kommt:

Analyse asynchroner Aufgaben beim Swoole-Lernen

Fazit

Wir sind also zu folgendem Ergebnis gekommen:
1.Task kann im Hintergrund als Prozess laufen, ohne die nachfolgende Ausführung zu beeinträchtigen , hier ist asynchron
2. Wenn eine Aufgabe belegt ist, wird eine andere verwendet
3. (Dieser Fall zeigt den Effekt nicht, Sie können ihn bei Interesse testen)

Zu beachtende Punkte

1. Achten Sie auf die Anzahl der Aufgaben, um einen übermäßigen Leistungsaufwand zu vermeiden
2. Hinweis: Verhindern Sie, dass der Prozess blockiert wird. Der blockierte Prozess verbraucht Ressourcen und ist seit langem belegt. Er kann vom nächsten Client nicht verwendet werden.
3.exit/die ist gefährlich und führt zum Beenden des Worker-Prozesses

Erweiterung

Asynchrone E/A in Swoole, Lesen und Schreiben von Dateien, Lesen und Schreiben von MySQL sowie Lesen und Schreiben von Redis sind ebenfalls ähnlich.
Asynchrone E/A gibt zuerst das Ergebnis zurück und führt dann E/A aus Dies wird jedoch hauptsächlich in Situationen verwendet, in denen es lange dauert, das Ergebnis jedoch keine Auswirkungen auf das Programm hat, z. B.:
Artikellesevolumen +1
Der Synchronisierungsprozess ist Redis/MySQL-Daten +1-> Artikel anzeigen
Der asynchrone Prozess besteht darin, den Artikel direkt anzuzeigen und dann Redis/MySQL-Daten +1 zu senden
Auf diese Weise können Benutzer die Wartezeit verkürzen das gilt auch
Interessierte Freunde können den io-Teil des Dokuments weiter studieren, aber ich werde hier nicht auf Details eingehen

Das ist der gesamte Inhalt dieses Artikels, ich hoffe, er wird hilfreich sein Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website!

Verwandte Empfehlungen:

So verwenden Sie Swoole zum Erstellen eines Servers (Teil 2)

Das obige ist der detaillierte Inhalt vonAnalyse asynchroner Aufgaben beim Swoole-Lernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage