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 중국어 웹사이트의 기타 관련 기사를 참조하세요!