Maison >développement back-end >tutoriel php >Sortie de la nouvelle version de Swoole 1.10.0, ajoutant de nombreuses nouvelles analyses de fonctionnalités

Sortie de la nouvelle version de Swoole 1.10.0, ajoutant de nombreuses nouvelles analyses de fonctionnalités

jacklove
jackloveoriginal
2018-07-02 17:58:391654parcourir

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é

Articles qui pourraient vous intéresser :

PHP implémente l'impression dans le sens des aiguilles d'une montre Exemples de méthode matricielle (matrice spirale)

Explication de la méthode PHP pour déterminer si un arbre binaire est symétrique

Utilisation de PHP Un exemple de la façon de supprimer tous les fichiers d'un répertoire avec une seule ligne de code

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