Heim >PHP-Framework >Swoole >Wie Swoole die PHP-Leistung verbessert

Wie Swoole die PHP-Leistung verbessert

(*-*)浩
(*-*)浩Original
2019-12-07 14:19:002826Durchsuche

Wie Swoole die PHP-Leistung verbessert

Die Bearbeitung von Netzwerkanfragen in Swoole erfolgt ereignisbasiert und nutzt die zugrunde liegende Epoll/Kqueue-Implementierung voll aus, wodurch es sehr einfach ist, Millionen von Anfragen zu bedienen.

Swoole4 verwendet eine neue Coroutine-Kernel-Engine und verfügt jetzt über ein Vollzeit-Entwicklungsteam. Damit treten wir in eine beispiellose Phase in der Geschichte von PHP ein und bieten einzigartige Möglichkeiten für schnelle Leistungsverbesserungen. (Empfohlenes Lernen: Swoole-Video-Tutorial )

Coroutine

Swoole4 oder eine höhere Version verfügt über eine integrierte Coroutine für hohe Verfügbarkeit kann vollständig synchronen Code verwenden, um eine asynchrone Leistung zu erzielen, der PHP-Code verfügt über keine zusätzlichen Schlüsselwörter und die Coroutine-Planung wird automatisch unter der Haube durchgeführt.

Entwickler können Coroutinen als ultraleichte Threads verstehen und Sie können problemlos Tausende von Coroutinen in einem Prozess erstellen.

Es dauert nur 0,2 Sekunden, um riesige Datenmengen aus MySQL mit 10.000 gleichzeitigen Anfragen zu lesen

$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';

Hybridserver

Das können Sie Erstellen Sie mehrere Dienste in einer Ereignisschleife: TCP, HTTP, Websocket und HTTP2 und können problemlos Zehntausende von Anfragen hosten.

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();

Das obige ist der detaillierte Inhalt vonWie Swoole die PHP-Leistung verbessert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn