À propos du projet

Swoole est une extension PHP fournissant un environnement d'exécution de concurrence événementiel, asynchrone et basé sur les coroutines. Elle est écrite comme une extension C et installée via PECL ou compilée à partir des sources ; elle nécessite Linux, macOS, Cygwin ou WSL, PHP 8.2 ou ultérieur, et GCC 4.8 ou ultérieur. Capacités principales décrites dans le README : - Coroutines : l'ordonnancement intégré des coroutines permet aux développeurs d'écrire du code PHP à apparence synchrone qui s'exécute de manière asynchrone. Les coroutines sont décrites comme des threads ultra-légers, avec des milliers créables dans un seul processus. - Hooks d'exécution : Swoole\Runtime::enableCoroutine() remplace les pointeurs de fonctions de flux de la Zend VM afin que les fonctions d'E/S bloquantes deviennent non bloquantes et ordonnancées par coroutines. Les intégrations prises en charge incluent ext-curl (avec Symfony et Guzzle), ext-redis, ext-mysqli, plusieurs pilotes PDO (MySQL, PostgreSQL, SQLite, Oracle, ODBC), les fonctions de flux sur TCP/UDP/UDG/Unix/SSL-TLS et les API de système de fichiers, ext-sockets, ext-soap, les fonctions de sommeil, proc_open, gethostbyname, shell_exec, exec, et les fonctions de fichier telles que fread/fopen/fsockopen/fwrite/flock. - Serveurs : les serveurs HTTP, WebSocket, HTTP/2 et TCP peuvent partager une même boucle d'événements ; un exemple de serveur WebSocket écoute également du TCP brut sur un second port. La couche réseau utilise epoll/kqueue. - Clients : des clients coroutines pour HTTP, WebSocket, HTTP/2 et TCP sont présentés, avec la gestion DNS, des requêtes et des réponses ordonnancée automatiquement. - Canaux : Swoole\Coroutine\Channel fournit une communication de style CSP entre coroutines, démontrée avec un pool de connexions Redis et un exemple producteur/consommateur. - Minuteries : Swoole\Timer::tick, after, clear et exists, ainsi que des boucles de sommeil basées sur les coroutines. - Charges de travail mixtes : le README illustre 10 000 sommeils, des lectures/écritures de fichiers, des requêtes PDO/MySQLi, et des échanges serveur-client TCP/UDP dans un seul processus utilisant des hooks d'exécution. Les options d'installation sont PECL (pecl install swoole) ou une compilation depuis les sources (phpize, configure, make, make install), avec des drapeaux optionnels tels que --enable-openssl, --enable-sockets, --enable-mysqlnd et --enable-swoole-curl. Les clients et API asynchrones ont été déplacés vers une extension séparée swoole_async à partir de la version 4.3.0. Le projet est sous licence Apache 2.0 et renvoie à wiki.swoole.com pour la documentation, un dépôt d'aide IDE, une liste Awesome Swoole, et des canaux communautaires sur Twitter, Discord et une communauté en langue chinoise.