La version 1.10.0 de Swoole a été récemment publiée, ajoutant de nombreuses nouvelles fonctionnalités. L'article suivant présente donc principalement des informations pertinentes sur les nouvelles fonctionnalités de la version 1.10.0 de Swoole et les partage pour votre référence et votre étude, si nécessaire. Les amis peuvent se référer à l'
Avant-propos
Swoole peut être largement utilisé dans Internet, les communications mobiles, les logiciels d'entreprise, le cloud computing, les jeux en ligne et le Internet des objets (IOT), Internet des véhicules, maison intelligente et 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.
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 le la couche inférieure implémente l'analyse 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 demandes lentes
La nouvelle version ajoute le suivi La fonction de requête lente 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 le traitement de 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 stream permet la connexion entre Reactor, Processus des travailleurs et des tâches La méthode de communication est plus flexible et plus découplée. 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();
Communication entre le réacteur et le travailleur, utilisez dispatch_mode = 7 pour activer
Communication entre Worker et Task, utilisez task_ipc_mode = 4 pour activer
Ajouter une fonction Event::cycle
Le code utilisateur peut personnaliser une fonction hook EventLoop, qui sera appelée à la fin de chaque tour de boucle d'événement. 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
Mettre à jour Table::incr et Table::decr pour prendre en charge les entiers signés
Compatible avec la version PHP-7.2
Fix Event::del The problème selon lequel la fonction ne peut pas supprimer le handle d'entrée standard
Correction du problème selon lequel l'intervalle de minuterie dans le processus de tâche est inférieur au délai d'attente de réception du client, provoquant une impasse 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 des erreurs sera imprimé lorsque tous les Workers sont occupés
Ajouter un itérateur de port pour parcourir toutes les connexions d'un port d'écoute
Résoudre le problème d'alignement de la mémoire de Table sur les non- Plateformes x86
Correction du problème de configuration max_request non valide en mode BASE
Correction du serveur WebSocket renvoyant le mauvais paquet lorsque certaines trames ping client contiennent Problème de données de masque
Correction du problème selon lequel HttpClient utilise la méthode HEAD pour répondre au contenu transportant Content-Length, ce qui le bloque
Augmenter la prise en charge du client asynchrone MySQL pour le format JSON Prise en charge
Adresse de téléchargement
GITHUB : https : //github.com/swoole/swoole- src/releases/tag/v1.10.0
Open Source Chine : https://gitee.com/swoole/swoole/tree/v1.10.0/
PECL : https://pecl.php.net/package/swoole/1.10.0
Téléchargement local : http://xiazai.jb51.net/201801/yuanma/swoole-src-1.10 .0(jb51.net).rar
Résumé
Explication de la méthode PHP pour déterminer si un arbre binaire est symétrique
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!