Maison cadre php Swoole Pratique de programmation asynchrone Swoole : améliorer dix fois les performances des services Web

Pratique de programmation asynchrone Swoole : améliorer dix fois les performances des services Web

Jun 13, 2023 pm 09:41 PM
异步编程 web服务性能 swoole

Avec le développement rapide d'Internet, de plus en plus d'entreprises ont commencé à s'impliquer dans le développement Web, et comment améliorer les performances des services Web est devenu une question clé. Ces dernières années, la programmation asynchrone est progressivement devenue populaire en tant que technologie permettant d'améliorer l'efficacité des E/S du réseau, et le framework Swoole est l'un des représentants de la programmation asynchrone. Dans cet article, nous présenterons comment implémenter la programmation asynchrone via le framework Swoole et démontrerons son effet significatif sur l'amélioration des performances des services Web.

1. Qu'est-ce que Swoole

Swoole est un framework de communication réseau hautes performances, asynchrone et simultané. Il permet aux développeurs PHP d'écrire plus facilement du code asynchrone et d'améliorer l'efficacité et les performances du code. Swoole fournit un socket de domaine TCP/UDP/Unix, un serveur HTTP, un serveur WebSocket, ainsi que des fonctions de texte asynchrone, de sérialisation et de désérialisation JSON. Actuellement, Swoole est favorisé par de plus en plus de développeurs PHP.

2. Plusieurs points à noter lors de l'utilisation de Swoole

1. Ouvrez la coroutine :

Dans Swoole, afin de supporter la programmation asynchrone, nous Les coroutines doivent être activées. Les coroutines sont une méthode de planification plus légère que les threads car il n'y a pas de surcharge supplémentaire de changement de contexte et de ressources en mode noyau.

Utiliser Swoole Il est très pratique d'utiliser des coroutines Il vous suffit d'ajouter le code suivant au fichier d'entrée ou à l'objet serveur Swoole :

SwooleRuntime::enableCoroutine();
Copier après la connexion

De cette façon, vous pouvez. utilisez la fonction coroutine fournie par Swoole .

2. Faites attention aux fuites de mémoire :

Lorsque vous utilisez Swoole pour la programmation asynchrone, vous devez faire attention aux fuites de mémoire. Étant donné que la coroutine dans la programmation asynchrone attendra longtemps les E/S, si la mémoire n'est pas libérée à temps, cela entraînera un gaspillage de mémoire.

Swoole fournit une méthode pour nettoyer le contexte de la coroutine : Coroutine::defer(). Utilisez-le pour nettoyer le contexte à la fin de la coroutine, par exemple :

SwooleCoroutineun(function () {
    echo "Coroutine Start
";
    Coroutine::defer(function () {
        echo "Coroutine End
";
    });
});
Copier après la connexion

3 Faites attention à la version de Swoole :

La nouvelle version de Swoole le sera. continue d'être optimisé et amélioré, nous devons donc utiliser la dernière version. Dans le même temps, vous devez faire attention aux modifications apportées à chaque version pour garantir la compatibilité et la stabilité du code.

3. Pratique Swoole : améliorer les performances des services Web

Ci-dessous, nous utilisons un exemple simple pour démontrer comment utiliser le framework Swoole pour améliorer les performances des services Web.

Nous créons d'abord un simple fichier PHP server.php. Ce fichier écoutera le port 9501 local et renverra une chaîne Hello World :

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();
Copier après la connexion

Exécutez ceci à partir de la ligne de commande. et accédez à http://127.0.0.1:9501/, vous pouvez voir que Hello World est affiché.

Maintenant, nous changeons le code de ce serveur en mode asynchrone :

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501, SWOOLE_BASE);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();
Copier après la connexion

Dans le code ci-dessus, nous avons ajouté le troisième paramètre, qui consiste à utiliser le mode SWOOLE_BASE pour démarrer le serveur . De cette façon, nous pouvons utiliser les coroutines, les fonctions d'E/S asynchrones et d'écoute d'événements fournies par Swoole.

Ensuite, nous utiliserons l'outil Apache Bench pour tester les performances du serveur lors du traitement d'un grand nombre de requêtes.

L'outil Apache Bench peut simuler de vraies requêtes HTTP Nous pouvons utiliser les requêtes simultanées multithread qu'il fournit pour simuler plusieurs utilisateurs accédant au serveur en même temps et tester les performances du serveur sous différentes requêtes. charges.

Entrez la commande suivante dans le terminal pour installer l'outil Apache Bench :

# ubuntu
sudo apt-get install apache2-utils

# centos
sudo yum install httpd-tools
Copier après la connexion

Utilisez la commande suivante pour tester les performances du serveur tout à l'heure :

ab -n 1000 -c 100 http://127.0.0.1:9501
Copier après la connexion
#🎜 🎜#Dans cette commande, nous utilisons le paramètre -n pour indiquer le nombre total de requêtes, et -c pour indiquer le nombre de requêtes simultanées. Nous fixons le nombre total de requêtes à 1 000 et le nombre total de requêtes simultanées à 100.

Une fois le test terminé, nous pouvons voir les résultats du test imprimés par Apache Bench :

Concurrency Level:      100
Time taken for tests:   0.041 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      110000 bytes
HTML transferred:       12000 bytes
Requests per second:    24540.63 [#/sec] (mean)
Time per request:       4.075 [ms] (mean)
Time per request:       0.041 [ms] (mean, across all concurrent requests)
Transfer rate:          2624.27 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     1    4   0.5      4       6
Waiting:        0    4   0.5      4       6
Total:          1    4   0.5      4       6

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      4
  80%      4
  90%      4
  95%      5
  98%      5
  99%      5
 100%      6 (longest request)
Copier après la connexion

Nous pouvons voir que lorsque ce serveur traite 1000 requêtes, la moyenne de chaque requête Le temps de réponse est de 4,075 millisecondes et le nombre de demandes de réponse par seconde est d'environ 24 540. Ce résultat de performance est déjà très bon.

Ensuite, nous augmentons la charge du serveur pour voir comment le framework Swoole fonctionne dans des conditions de concurrence élevée. Nous avons augmenté le nombre de requêtes simultanées à 1000, soit :

ab -n 10000 -c 1000 http://127.0.0.1:9501
Copier après la connexion

Une fois le test terminé, nous voyons à nouveau les résultats du test imprimés par Apache Bench :

Concurrency Level:      1000
Time taken for tests:   2.437 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      1100000 bytes
HTML transferred:       120000 bytes
Requests per second:    4107.95 [#/sec] (mean)
Time per request:       243.651 [ms] (mean)
Time per request:       0.244 [ms] (mean, across all concurrent requests)
Transfer rate:          441.50 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8  84.5      0     1000
Processing:     1   22  16.0     20      176
Waiting:        0   21  16.0     20      176
Total:          1   30  86.2     20     1001

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     23
  75%     25
  80%     26
  90%     30
  95%     41
  98%     52
  99%     65
 100%   1001 (longest request)
Copier après la connexion
Comme vous peut voir, dans le simultané Lorsque le nombre atteint 1000, le temps de réponse de ce serveur n'est qu'environ 200 ms. Par rapport aux serveurs Web synchrones avec programmation non asynchrone, Swoole peut considérablement améliorer la concurrence et les performances.

4. Résumé

Cet article présente le framework Swoole et son application pour améliorer les performances des services Web. Nous avons appris à utiliser Swoole pour démarrer des coroutines, à faire attention aux fuites de mémoire et à tester les performances des serveurs asynchrones Swoole.

En pratique, nous pouvons utiliser des outils efficaces tels que les outils Swoole et Apache Bench pour améliorer les performances des services web. Dans les scénarios à forte concurrence sur Internet, l'utilisation de Swoole pour la programmation asynchrone peut considérablement améliorer les performances du serveur et répondre aux besoins des entreprises en matière de services Web hautes performances.

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la coroutine Swoole dans Laravel Comment utiliser la coroutine Swoole dans Laravel Apr 09, 2024 pm 06:48 PM

L'utilisation des coroutines Swoole dans Laravel peut traiter un grand nombre de requêtes simultanément. Les avantages incluent : Traitement simultané : permet de traiter plusieurs requêtes en même temps. Hautes performances : Basé sur le mécanisme d’événements Linux epoll, il traite efficacement les requêtes. Faible consommation de ressources : nécessite moins de ressources serveur. Facile à intégrer : intégration transparente avec le framework Laravel, simple à utiliser.

Comment implémenter la programmation asynchrone avec les fonctions C++ ? Comment implémenter la programmation asynchrone avec les fonctions C++ ? Apr 27, 2024 pm 09:09 PM

Résumé : La programmation asynchrone en C++ permet d'effectuer plusieurs tâches sans attendre des opérations fastidieuses. Utilisez des pointeurs de fonction pour créer des pointeurs vers des fonctions. La fonction de rappel est appelée lorsque l'opération asynchrone est terminée. Les bibliothèques telles que boost::asio fournissent un support de programmation asynchrone. Le cas pratique montre comment utiliser les pointeurs de fonction et boost::asio pour implémenter des requêtes réseau asynchrones.

Lequel est le meilleur, Swoole ou Workerman ? Lequel est le meilleur, Swoole ou Workerman ? Apr 09, 2024 pm 07:00 PM

Swoole et Workerman sont tous deux des frameworks de serveur PHP hautes performances. Connu pour son traitement asynchrone, ses excellentes performances et son évolutivité, Swoole convient aux projets qui doivent gérer un grand nombre de requêtes simultanées et un débit élevé. Workerman offre la flexibilité des modes asynchrone et synchrone, avec une API intuitive mieux adaptée à la facilité d'utilisation et aux projets gérant des volumes de concurrence inférieurs.

Programmation asynchrone de fonctions JavaScript : conseils essentiels pour gérer des tâches complexes Programmation asynchrone de fonctions JavaScript : conseils essentiels pour gérer des tâches complexes Nov 18, 2023 am 10:06 AM

Programmation asynchrone des fonctions JavaScript : compétences essentielles pour gérer des tâches complexes Introduction : Dans le développement front-end moderne, la gestion de tâches complexes est devenue un élément indispensable. Les compétences en programmation asynchrone des fonctions JavaScript sont la clé pour résoudre ces tâches complexes. Cet article présentera les concepts de base et les méthodes pratiques courantes de la programmation asynchrone des fonctions JavaScript, et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et utiliser ces techniques. 1. Concepts de base de la programmation asynchrone Dans la programmation synchrone traditionnelle, le code est

Comment redémarrer le service dans le framework swoole Comment redémarrer le service dans le framework swoole Apr 09, 2024 pm 06:15 PM

Pour redémarrer le service Swoole, procédez comme suit : Vérifiez l'état du service et obtenez le PID. Utilisez "kill -15 PID" pour arrêter le service. Redémarrez le service en utilisant la même commande que celle utilisée pour démarrer le service.

Comment swoole_process permet-il aux utilisateurs de changer ? Comment swoole_process permet-il aux utilisateurs de changer ? Apr 09, 2024 pm 06:21 PM

Swoole Process permet aux utilisateurs de changer. Les étapes spécifiques sont les suivantes : créer un processus ; définir l'utilisateur du processus pour démarrer le processus ;

Lequel a les meilleures performances, swoole ou java ? Lequel a les meilleures performances, swoole ou java ? Apr 09, 2024 pm 07:03 PM

Comparaison des performances : Débit : Swoole a un débit plus élevé grâce à son mécanisme de coroutine. Latence : la commutation de contexte de coroutine de Swoole a une surcharge et une latence plus faibles. Consommation de mémoire : les coroutines de Swoole occupent moins de mémoire. Facilité d'utilisation : Swoole fournit une API de programmation simultanée plus facile à utiliser.

Problèmes courants et solutions dans la programmation asynchrone dans le framework Java Problèmes courants et solutions dans la programmation asynchrone dans le framework Java Jun 04, 2024 pm 05:09 PM

3 problèmes et solutions courants dans la programmation asynchrone dans les frameworks Java : Callback Hell : utilisez Promise ou CompletableFuture pour gérer les rappels dans un style plus intuitif. Conflit de ressources : utilisez des primitives de synchronisation (telles que des verrous) pour protéger les ressources partagées et envisagez d'utiliser des collections thread-safe (telles que ConcurrentHashMap). Exceptions non gérées : gérez explicitement les exceptions dans les tâches et utilisez un cadre de gestion des exceptions (tel que CompletableFuture.exceptionally()) pour gérer les exceptions.

See all articles