La gestion des requêtes réseau dans Swoole est basée sur les événements et tire pleinement parti de l'implémentation sous-jacente d'epoll/kqueue, ce qui permet de répondre très facilement à des millions de requêtes.
Swoole4 utilise un nouveau moteur de noyau coroutine et dispose désormais d'une équipe de développement à temps plein. Nous entrons donc dans une période sans précédent dans l'histoire de PHP, offrant des possibilités uniques d'amélioration des performances à grande vitesse. (Apprentissage recommandé : tutoriel vidéo swoole )
Coroutine
Swoole4 ou supérieur possède une coroutine intégrée hautement disponible. Vous pouvez. utilisez du code entièrement synchrone pour obtenir des performances asynchrones, le code PHP n'a aucun mot-clé supplémentaire et la planification des coroutines est automatiquement effectuée sous le capot.
Les développeurs peuvent comprendre les coroutines comme des threads ultra-légers, et vous pouvez facilement créer des milliers de coroutines dans un processus.
Cela ne prend que 0,2 seconde pour lire des données massives de MySQL avec 10 000 requêtes simultanées
$s = microtime(true); Co\run(function() { for ($c = 100; $c--;) { go(function () { $mysql = new Swoole\Coroutine\MySQL; $mysql->connect([ 'host' => '127.0.0.1', 'user' => 'root', 'password' => 'root', 'database' => 'test' ]); $statement = $mysql->prepare('SELECT * FROM `user`'); for ($n = 100; $n--;) { $result = $statement->execute(); assert(count($result) > 0); } }); } }); echo 'use ' . (microtime(true) - $s) . ' s';
Serveur hybride
Vous pouvez Créez plusieurs services sur une boucle d'événements : TCP, HTTP, Websocket et HTTP2, et pouvez facilement héberger des dizaines de milliers de requêtes.
function tcp_pack(string $data): string { return pack('N', strlen($data)) . $data; } function tcp_unpack(string $data): string { return substr($data, 4, unpack('N', substr($data, 0, 4))[1]); } $tcp_options = [ 'open_length_check' => true, 'package_length_type' => 'N', 'package_length_offset' => 0, 'package_body_offset' => 4 ]; --------------------------------------------------------------------------------------------------------------- $server = new Swoole\WebSocket\Server('127.0.0.1', 9501, SWOOLE_BASE); $server->set(['open_http2_protocol' => true]); // http && http2 $server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) { $response->end('Hello ' . $request->rawcontent()); }); // websocket $server->on('message', function (Swoole\WebSocket\Server $server, Swoole\WebSocket\Frame $frame) { $server->push($frame->fd, 'Hello ' . $frame->data); }); // tcp $tcp_server = $server->listen('127.0.0.1', 9502, SWOOLE_TCP); $tcp_server->set($tcp_options); $tcp_server->on('receive', function (Swoole\Server $server, int $fd, int $reactor_id, string $data) { $server->send($fd, tcp_pack('Hello ' . tcp_unpack($data))); }); $server->start();
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!