Maison >développement back-end >tutoriel php >Explication détaillée de la nouvelle version de Swoole 1.10.0
Swoole peut être largement utilisé dans Internet, les communications mobiles, les logiciels d'entreprise, le cloud computing, les jeux en ligne, l'Internet des objets (IOT), l'Internet des véhicules, les maisons intelligentes et d'autres domaines. L'utilisation de PHP + Swoole comme cadre de communication réseau peut considérablement améliorer l'efficacité des équipes de R&D informatique de l'entreprise et se concentrer davantage sur le développement de produits innovants. Récemment, Swoole, le moteur de communication réseau asynchrone, parallèle et hautes performances de PHP, a publié la version 1.10.0. Cette version ajoute plusieurs nouvelles fonctionnalités. Pas grand chose à dire ci-dessous, jetons un œil à l'introduction détaillée, j'espère que cela pourra aider tout le monde.
Résolution DNS automatique
La nouvelle version du client asynchrone n'a plus besoin d'utiliser swoole_async_dns_lookup pour résoudre les noms de domaine, et la couche inférieure implémente la résolution automatique des noms de domaine. Le client peut transmettre directement le nom de domaine lors de l'exécution de la méthode de connexion.
$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);
Journal des requêtes lentes
La nouvelle version ajoute la fonction de suivi des requêtes lentes, qui peut enregistrer la pile d'appels de fonction PHP des requêtes lentes.
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();
Après avoir traité la requête lente, une ligne de message d'erreur sera imprimée dans le journal /tmp/trace.log :
[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
Nouveau module STREAM
Le nouveau module de flux rend la méthode de communication entre les processus Reactor, Worker et Task plus flexible et découplée au maximum. Les projets en ligne complexes utilisent le mode flux pour rendre l'allocation et la planification des demandes plus efficaces.
$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();
Pour la communication entre Reactor et Worker, utilisez dispatch_mode = 7 pour activer la communication entre
Pour la communication entre Worker et Task, utilisez task_ipc_mode = 4 pour activer
Ajouter une fonction Event::cycle
Le code utilisateur peut personnaliser une fonction de hook EventLoop, qui sera utilisée à chaque tour d'événement boucle Appelée une fois terminé. Il est pratique d'utiliser le framework Generator + Yield ou Swoole de type Promise pour implémenter votre propre planificateur.
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); }); });
Autres mises à jour
Table::incr et Table::decr mises à jour pour prendre en charge les entiers signés
Compatible avec la version PHP-7.2
Corrigez le problème selon lequel la fonction Event::del ne peut pas supprimer le handle d'entrée standard
Corrigez le Processus de tâche L'intervalle de minuterie interne est inférieur au délai d'expiration de réception du client, provoquant un problème de blocage Client::recv
Ajoutez l'élément de configuration ssl_host_name pour vérifier la légitimité de l'hôte SSL/TLS
Lorsque dispatch_mode = 3 est utilisé, un journal d'erreurs est imprimé lorsque tous les Workers sont occupés
Ajouter un itérateur de port pour parcourir tout un port d'écoute Connexion
Correction du problème d'alignement mémoire de Table sur les plateformes non-x86
Correction du problème de configuration max_request non valide en mode BASE
Correction du problème du serveur WebSocket renvoyant une erreur de paquet lorsque certaines trames ping client contiennent des données de masque
Correction de HttpClient utilisant la méthode HEAD pour répondre avec des problèmes de longueur de contenu provoquant un blocage
Augmenter la prise en charge du client asynchrone MySQL pour le format JSON
Recommandations associées :
Swoole et méthode de mise en œuvre simple de salle de discussion Websocket
php utilise swoole pour mettre à jour les données des clients en temps réel
Utilisez Swoole pour explorer de manière asynchrone les pages Web Partage pratique
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!