기존의 PHP 프로그래밍 모드에서 코드는 일반적으로 순차적으로 실행됩니다. 즉, 각 작업은 계속되기 전에 이전 작업이 완료 될 때까지 기다려야합니다. 비동기 프로그래밍을 통해 기본 스레드를 차단하지 않고도 여러 작업이 동시에 실행될 수 있으므로 응용 프로그램 성능 및 응답 속도가 크게 향상됩니다.
PHP의 비동기 프로그래밍은 이벤트 루프 및 콜백 기능을 통해 구현할 수 있습니다. 이 메커니즘은 높은 일환 네트워크 서비스, 실시간 시스템 및 타이밍 작업에 널리 사용됩니다.
Libev는 이벤트를 듣고 트리거 될 때 해당 콜백을 실행할 수있는 효율적인 이벤트 루프 메커니즘을 제공하는 확장 된 PHP 라이브러리입니다. libev 사용을 시작하려면 확장자를 먼저 설치 한 다음 다음 코드로 이벤트 루프를 초기화해야합니다.
require 'vendor/autoload.php';
$loop = new \LibEv\EventLoop();
위의 코드는 네트워크 이벤트, 타이머 또는 기타 I/O 작업을 듣는 데 사용되는 이벤트 루프 객체를 만듭니다.
다음 예제는 Libev를 사용하여 기본 스레드를 차단하지 않고도 여러 클라이언트 연결을 동시에 처리 할 수있는 간단한 비동기 웹 서버를 작성하는 방법을 보여줍니다.
use \LibEv\EventLoop;
use \LibEv\IO\Stream\Server;
$loop = new EventLoop();
$server = new Server($loop, '127.0.0.1', 8080);
$server->on('connection', function(Server $server, Stream $client) {
echo 'New client connected';
});
$loop->run();
이 예제의 서버는 포트 8080에 리시는 다음 새 연결이 감지되면 콜백 함수를 실행합니다. 동시에, 이벤트 루프는 계속 실행되므로 여러 연결의 동시 처리를 지원합니다.
비동기 프로그래밍에서 타이머는 매우 일반적인 기능입니다. 지정된 시간 간격 후에 자동 콜백을 트리거 할 수 있습니다. 다음 예제는 libev를 사용하여주기적인 타이머를 만드는 방법을 보여줍니다.
use \LibEv\EventLoop;
use \LibEv\Timer;
$loop = new EventLoop();
$timer = new Timer($loop, 1.0, true); // 그 밖의 모든 1 몇 초 만에 한 번 실행하십시오
$timer->on('timeout', function(Timer $timer) {
echo 'Timer has timed out';
});
$loop->run();
이 타이머는 매 초마다 콜백을 실행하며 로그 새로 고침, 리소스 모니터링 또는 작업 스케줄링과 같은주기적인 작업을 수행하는 데 사용할 수 있습니다.
PHP는 이벤트 루프 및 콜백 메커니즘을 사용함으로써 진정한 비동기 프로그래밍을 구현할 수있어 응용 프로그램의 응답 속도 및 동시 처리 기능이 크게 향상됩니다. Libev 확장을 통해 개발자는 비동기 네트워크 서버, 타이밍 작업 및 다양한 사용자 정의 이벤트 중심 애플리케이션을 쉽게 구축하여 PHP 응용 프로그램에 더 높은 성능과 확장 성을 제공 할 수 있습니다.