Maison  >  Article  >  cadre php  >  Comment utiliser Swoole dans Laravel

Comment utiliser Swoole dans Laravel

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-12-12 10:28:136487parcourir

Comment utiliser Swoole dans Laravel

Le moteur de communication réseau asynchrone, parallèle et hautes performances de PHP, écrit en langage C pur, fournit un serveur multithread asynchrone en langage PHP, un client réseau TCP/UDP asynchrone et un MySQL, Redis asynchrone, pool de connexions à la base de données, AsyncTask, file d'attente de messages, minuterie en millisecondes, lecture et écriture de fichiers asynchrones, requête DNS asynchrone. Swoole a un serveur/client Http/WebSocket intégré et un serveur Http2.0.

La documentation sur le site officiel de Swoole n’est pas assez riche, ce qui est un casse-tête, mais la plupart des problèmes sont expliqués. Si vous êtes intéressé par Swoole, consultez ce didacticiel d'introduction à Swoole. Swoole fournit de nombreuses fonctions impressionnantes telles que le multi-threading et les connexions longues, ce qui amène PHP à un nouveau niveau. Pour plus de détails, vous pouvez lire le didacticiel d'introduction. Cet article se limite à discuter de la combinaison de Laravel et de Swoole.

Afin de fournir des services, Swoole doit fonctionner en mode CLI. Qu'est-ce que le mode CLI ? Si votre code commercial Swoole est écrit dans un fichier appelé server.php, saisissez php server.php sur la ligne de commande pour l'ouvrir. C'est un casse-tête, car le framework Laravel ne fonctionne pas comme ça, alors comment le combiner avec Laravel ? C’est vrai, c’est aussi simple que cela de personnaliser une commande artisanale.

ÉTAPE 1-Personnaliser la commande

À propos de la personnalisation d'Artisan Commnad, tous les points techniques que vous devez connaître sont ici. J'ai personnalisé une commande appelée SwooleCommand. Collez directement la clé. code :

Comment utiliser Swoole dans Laravel

le feu est l'entrée

Exécutez php artisan swoole start sous la ligne de commande (CLI) pour démarrer le service Swoole. En analysant le code, vous pouvez voir que les paramètres de commande incluent le démarrage, le redémarrage et l'arrêt. J'ai uniquement implémenté la partie démarrage pour éviter les problèmes. Si vous devez arrêter, utilisez la commande kill sous Linux pour arrêter le processus. sont assez simples :

1. Exécutez la commande ps -aux|grep artisan pour obtenir le pid (il existe plusieurs processus, tuez simplement le premier)

2. Exécutez la commande kill pid , le pid est celui que vous avez obtenu lors de la première étape

La configuration de Swoole dépasse le cadre de cet article. Veuillez vous rendre sur le site officiel. Le service Swoole est enregistré dans la variable $serv ici pour Laravel. pour envoyer des commandes pour une interaction ultérieure. Vous pouvez voir que le code de réponse à l'événement de Swoole ressemble à ceci :

Comment utiliser Swoole dans Laravel

Utilisez le gestionnaire pour traiter la réponse à l'événement

Si le feu ouvre la porte à Swoole, alors le gestionnaire voici la bande transporteuse entre Swoole et Laravel. À l'aide du gestionnaire que vous écrivez, vous pouvez écrire diverses logiques métier dans le framework Laravel, puis utiliser les diverses fonctions efficaces et pratiques fournies par Laravel. "Handler" est une convention de dénomination. Vous pouvez également l'appeler "callback", "manager" ou "auditeur". Cela dépend de vos habitudes de dénomination. Je n'ai pas utilisé la nouvelle méthode mais j'ai utilisé l'IoC de Laravel pour injecter App::make, principalement pour éviter des problèmes (car le constructeur du gestionnaire utilise ma classe de traitement de données personnalisée, voir ci-dessous).

ÉTAPE 2-Gestionnaire personnalisé

Comme il s'agit d'une classe personnalisée, veuillez suivre l'espace de noms et le déclarer dans composer.json. Après cela, exécutez composer dump-autoload. Mettez à jour la commande. Par exemple, si je crée un dossier apphandlers pour stocker les gestionnaires, cela ressemble à ceci dans composer.json :

Comment utiliser Swoole dans Laravel

le chargement automatique ne peut pas manquer

puis à l'intérieur du gestionnaire C'est à vous de décider quoi faire. Quoi qu'il en soit, c'est presque la même chose que d'écrire un contrôleur. Vous pouvez utiliser diverses fonctions du framework Laravel à volonté :

Comment utiliser Swoole dans Laravel

J'ai mentionné dans la section précédente que j'ai mentionné cela. utilisez IoC en raison de la structure. Le serveur utilise sa propre classe de traitement de données. J'ai mis des ajouts, des suppressions, des modifications, des requêtes et d'autres services de traitement de données dans le référentiel. Il n'y a pas d'autre raison, mais de cette façon, le code semble plus propre. De cette façon, le processus d'utilisation de Swoole pour recevoir des données est terminé, mais que dois-je faire si je souhaite utiliser Swoole pour envoyer des données au client ? Ahem, c'est un peu plus gênant et nécessite une méthode de courbe à mettre en œuvre. Passez à la section suivante.

ÉTAPE 3-Envoyer des données

Il existe deux méthodes, mais les deux sont indissociables d'une structure kv de cache (la fonction Cache de Laravel suffit), enregistrez l'adresse du client données, sinon comment sauriez-vous où les envoyer. J'utilise le premier, ce qui évite les problèmes. Swoole n'a rien à voir avec l'envoi de données. Si vous avez besoin d'une connexion Websocket à long terme, cela ne s'applique pas. Si vous avez un meilleur moyen, dites-le-moi !

Le premier : fsockopen

C'est assez simple et n'a rien à voir avec swoole. Utilisez la fonction connection_info de Swoole pour obtenir l'adresse IP et le port du client, puis utilisez fsockopen pour envoyer des données directement.

Deuxième type : Surveillance des ports internes

Swoole prend en charge la surveillance de plusieurs ports. L'idée de la mise en œuvre est d'utiliser fsockopen pour envoyer des données au port d'écoute interne, puis vous pouvez appeler $serv pour envoyer le message. L'avantage est que vous n'avez pas besoin de connaître l'adresse IP et le port réels du client. Vous pouvez enregistrer l'identifiant $fd du client dans le cache et envoyer les données directement. En utilisant cette idée, n'oubliez pas d'ouvrir le port avec iptables. Je ne l'ai pas utilisé moi-même car je pense que c'est trop gênant si la connexion n'est pas longue.

Résumé

Swoole est génial, mais je ne l'ai pas vraiment beaucoup utilisé (j'attendrai d'avoir assez d'argent pour le projet). Vous pouvez également vous référer à la configuration sur le site officiel et utiliser Swoole comme agent d'hébergement nginx. On dit que les performances sont grandement améliorées.

Le site Web PHP chinois propose un grand nombre de tutoriels d'introduction à Swoole gratuits, tout le monde est invité à apprendre !

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
Article précédent:Que veut dire Swoole ?Article suivant:Que veut dire Swoole ?