Maison > cadre php > Swoole > le corps du texte

Comment Swoole améliore les performances PHP

(*-*)浩
Libérer: 2019-12-07 14:19:00
original
2776 Les gens l'ont consulté

Comment Swoole améliore les performances PHP

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';
Copier après la connexion

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();
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal