>  기사  >  PHP 프레임워크  >  Swoole이 PHP 성능을 향상시키는 방법

Swoole이 PHP 성능을 향상시키는 방법

(*-*)浩
(*-*)浩원래의
2019-12-07 14:19:002674검색

Swoole이 PHP 성능을 향상시키는 방법

Swoole의 네트워크 요청 처리는 이벤트 기반이며 기본 epoll/kqueue 구현을 최대한 활용하므로 수백만 건의 요청을 매우 쉽게 처리할 수 있습니다.

Swoole4는 새로운 코루틴 커널 엔진을 사용하며 현재는 풀타임 개발팀을 보유하고 있습니다. 따라서 우리는 PHP 역사상 유례없는 시기를 맞이하고 있으며, 성능. (추천 학습: swoole 동영상 튜토리얼 )

Coroutine

Swoole4 이상 버전 고가용성을 위해 내장된 코루틴이 있습니다. 완전한 동기 코드를 사용하여 비동기 성능을 얻을 수 있습니다. PHP 코드에는 추가 키워드가 없으며 기본 코루틴 예약이 자동으로 수행됩니다.

개발자는 코루틴을 초경량 스레드로 이해할 수 있으며, 프로세스에서 수천 개의 코루틴을 쉽게 생성할 수 있습니다.

10,000개의 동시 요청이 있는 MySQL에서 대용량 데이터를 읽는 데 단 0.2초밖에 걸리지 않습니다

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

하이브리드 서버

이벤트 루프에서 TCP, HTTP, Websocket 및 HTTP2 등 여러 서비스를 생성할 수 있으며 수만 개의 요청을 쉽게 호스팅할 수 있습니다.

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

위 내용은 Swoole이 PHP 성능을 향상시키는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.