Heim > Artikel > Backend-Entwicklung > Ausführliche Erklärung der neuen Version von Swoole 1.10.0
Swoole kann in großem Umfang in den Bereichen Internet, Mobilkommunikation, Unternehmenssoftware, Cloud Computing, Online-Spiele, Internet der Dinge (IOT), Internet der Fahrzeuge, Smart Homes und anderen Bereichen eingesetzt werden. Der Einsatz von PHP + Swoole als Netzwerkkommunikations-Framework kann die Effizienz von IT-Forschungs- und Entwicklungsteams in Unternehmen erheblich verbessern und sich stärker auf die Entwicklung innovativer Produkte konzentrieren. Kürzlich hat Swoole, die asynchrone, parallele und leistungsstarke Netzwerkkommunikations-Engine von PHP, Version 1.10.0 veröffentlicht. Diese Version fügt mehrere neue Funktionen hinzu. Im Folgenden gibt es nicht viel zu sagen. Werfen wir einen Blick auf die ausführliche Einführung. Ich hoffe, sie kann allen helfen.
Automatische DNS-Auflösung
Die neue Version des asynchronen Clients muss swoole_async_dns_lookup nicht mehr zum Auflösen von Domänennamen verwenden, und die unterste Ebene implementiert die automatische Auflösung von Domänennamen. Der Client kann den Domänennamen direkt übergeben, wenn er die Verbindungsmethode ausführt.
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC); $client->on("connect", function(swoole_client $cli) { $cli->send("GET / HTTP/1.1\r\n\r\n"); }); $client->on("receive", function(swoole_client $cli, $data){ echo "Receive: $data"; $cli->send(str_repeat('A', 100)."\n"); sleep(1); }); $client->on("error", function(swoole_client $cli){ echo "error\n"; }); $client->on("close", function(swoole_client $cli){ echo "Connection close\n"; }); //底层会自动进行异步域名解析 $client->connect('www.baidu.com', 9501);
Protokoll langsamer Anfragen
Die neue Version fügt die Funktion zum Verfolgen langsamer Anfragen hinzu, die den PHP-Funktionsaufrufstapel langsamer Anfragen aufzeichnen kann.
function test() { test_sleep(); } function test_sleep() { echo "sleep 5\n"; sleep(5); } $server = new swoole_server('127.0.0.1', 9501); $server->set([ 'worker_num' => 1, 'task_worker_num' => 1, 'trace_event_worker' => true, 'request_slowlog_timeout' => 1, 'request_slowlog_file' => '/tmp/trace.log', ]); $server->on('Receive', function($serv, $fd, $reactor_id, $data) { test(); $serv->send($fd, "Swoole: $data"); }); $server->start();
Nach der Verarbeitung der langsamen Anfrage wird eine Zeile mit einer Fehlermeldung im /tmp/trace.log-Protokoll gedruckt:
[08-Jan-2018 15:21:57] [worker#0] pid 26905 [0x00007f60cda22340] sleep() /home/htf/workspace/swoole/examples/server/trace.php:10 [0x00007f60cda222e0] test_sleep() /home/htf/workspace/swoole/examples/server/trace.php:4 [0x00007f60cda22280] test() /home/htf/workspace/swoole/examples/server/trace.php:28 [0x00007f60cda22190] {closure}() /home/htf/workspace/swoole/examples/server/trace.php:42 [0x00007f60cda22140] start() /home/htf/workspace/swoole/examples/server/trace.php:42
Neues STREAM-Modul
Das neue Stream-Modul macht die Kommunikationsmethode zwischen Reactor-, Worker- und Task-Prozessen flexibler und weitestgehend entkoppelt. Komplexe Online-Projekte nutzen den Stream-Modus, um die Anforderungszuteilung und -planung effizienter zu gestalten.
$serv = new swoole_server("127.0.0.1", 9501); $serv->set(array( 'dispatch_mode' => 7, 'worker_num' => 2, )); $serv->on('receive', function (swoole_server $serv, $fd, $threadId, $data) { var_dump($data); echo "#{$serv->worker_id}>> received length=" . strlen($data) . "\n"; }); $serv->start();
Für die Kommunikation zwischen Reaktor und Worker verwenden Sie „dispatch_mode = 7“, um die Kommunikation zwischen
für die Kommunikation zwischen Worker und Task zu aktivieren task_ipc_mode = 4 zum Aktivieren von
Event::cycle-Funktion hinzufügen
Benutzercode kann eine EventLoop-Hook-Funktion anpassen, die in jeder Runde des Ereignisses verwendet wird Schleife Wird aufgerufen, wenn die Schleife fertig ist. Es ist praktisch, Generator + Yield oder das Promise-ähnliche Swoole-Framework zu verwenden, um Ihren eigenen Planer zu implementieren.
Swoole\Timer::tick(2000, function ($id) { var_dump($id); }); Swoole\Event::cycle(function () { echo "hello [1]\n"; Swoole\Event::cycle(function () { echo "hello [2]\n"; Swoole\Event::cycle(null); }); });
Andere Updates
Table::incr und Table::decr aktualisiert, um vorzeichenbehaftete Ganzzahlen zu unterstützen
Kompatibel mit der PHP-7.2-Version
Beheben Sie das Problem, dass die Event::del-Funktion das Standardeingabehandle nicht entfernen kann
Beheben Sie das Aufgabenprozess Das interne Timer-Intervall ist kürzer als das Client-Empfangs-Timeout, was zu einem Client::recv-Deadlock-Problem führt
Fügen Sie das Konfigurationselement ssl_host_name hinzu, um die Legitimität des SSL/TLS-Hosts zu überprüfen
Wenn „dispatch_mode = 3“ verwendet wird, wird ein Fehlerprotokoll gedruckt, wenn alle Worker beschäftigt sind
Fügen Sie einen Port-Iterator hinzu, um den gesamten Überwachungsport zu durchlaufen Verbindung
Behebung des Speicherausrichtungsproblems von Table auf Nicht-x86-Plattformen
Behebung des Problems der ungültigen max_request-Konfiguration im BASE-Modus
Beheben Sie das Problem, dass der WebSocket-Server einen Paketfehler zurückgibt, wenn einige Client-Ping-Frames Maskendaten enthalten.
Beheben Sie, dass HttpClient mit der HEAD-Methode auf Probleme mit der Inhaltslänge antwortet Dies verursacht einen Stillstand
Erhöhen Sie die Unterstützung des asynchronen MySQL-Clients für das JSON-Format
Verwandte Empfehlungen:
Swoole und einfache WebSocket-Chatroom-Implementierungsmethode
PHP verwendet Swoole, um Kundendaten in Echtzeit zu aktualisieren
Verwenden Sie Swoole, um Webseiten asynchron zu crawlen. Praktisches Teilen
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der neuen Version von Swoole 1.10.0. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!