Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung der neuen Version von Swoole 1.10.0

Ausführliche Erklärung der neuen Version von Swoole 1.10.0

小云云
小云云Original
2018-01-11 11:30:102324Durchsuche

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!

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