Maison >développement back-end >tutoriel php >Explication détaillée de la nouvelle version de Swoole 1.10.0

Explication détaillée de la nouvelle version de Swoole 1.10.0

小云云
小云云original
2018-01-11 11:30:102351parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn