>백엔드 개발 >PHP 튜토리얼 >PHP 초보자 가이드: 비동기 프로그래밍

PHP 초보자 가이드: 비동기 프로그래밍

王林
王林원래의
2023-05-20 09:51:051087검색

PHP는 널리 사용되는 스크립트 언어로서 항상 웹 개발의 주류 언어 중 하나였습니다. 웹 개발에서는 웹 크롤러, 실시간 채팅, 긴 폴링과 같은 고성능 시나리오에서 비동기 프로그래밍이 점점 더 많이 사용되고 있습니다. 이 기사에서는 독자가 비동기 프로그래밍의 기본 사항을 숙지하고 웹 애플리케이션의 성능을 향상시킬 수 있도록 PHP 비동기 프로그래밍에 대한 관련 지식을 소개합니다.

1. 비동기 프로그래밍 소개

비동기 프로그래밍은 시간이 많이 걸리는 I/O 작업을 호출할 때 프로그램이 작업이 완료될 때까지 기다릴 필요가 없지만 작업이 완료된 후 해당 콜백 함수를 실행한다는 의미입니다. 동기 프로그래밍과 비교하여 비동기 프로그래밍은 더 나은 응답 속도와 동시성 기능을 가지며 I/O 대기 시간을 더 잘 활용할 수 있습니다.

2. PHP 비동기 프로그래밍의 구현 방법

PHP 비동기 프로그래밍에는 다중 프로세스와 이벤트 중심의 두 가지 주요 구현 방법이 있습니다.

1. 멀티 프로세스

멀티 프로세스의 구현은 프로그램에서 여러 프로세스를 생성하고 각 프로세스가 별도의 작업을 수행하는 것입니다. Unix/Linux 시스템에서는 fork() 시스템 호출을 통해 새로운 프로세스를 생성할 수 있으며, PCNTL 확장 패키지는 프로세스 생성, 종료, 동기화 및 기타 프로세스를 실현할 수 있는 자식 프로세스를 제어하기 위한 많은 함수 라이브러리를 제공합니다.

다중 프로세스 프로그래밍은 간단하지만 프로세스 간 통신, 자식 프로세스의 비정상 종료 등 문제도 많습니다. 또한 다수의 하위 프로세스를 생성할 경우 여러 프로세스가 시스템 리소스를 많이 소모하게 되어 시스템 부하가 높아집니다.

2. 이벤트 중심

이벤트 중심은 PHP에서 비동기 프로그래밍의 주류 구현입니다. 이 모드에서 프로그램은 지속적으로 이벤트를 수신하고 맞춤 이벤트가 트리거될 때만 해당 콜백 함수를 실행합니다. 이벤트 중심 모델을 사용하면 여러 연결이 하나의 스레드와 프로세스를 공유하여 시스템 리소스를 더 잘 활용할 수 있습니다.

일반적으로 사용되는 PHP 이벤트 기반 모델에는 Reactor 모델과 코루틴 모델이 있습니다. Reactor 모델은 이벤트 루프 메커니즘을 기반으로 하는 비동기 프로그래밍 모델입니다. React에서는 이벤트 루프를 사용하여 I/O 이벤트를 폴링하고 나면 해당 콜백 함수가 호출됩니다. 코루틴 모델은 코루틴을 통해 함수의 시작과 종료를 제어함으로써 비동기 프로그래밍의 목적을 달성합니다.

현재 PHP 비동기 프로그래밍에서 일반적으로 사용되는 확장은 다음과 같습니다.

  • Swoole: Swoole은 Event-loop 및 Coroutine을 기반으로 하는 고성능 네트워크 통신 프레임워크로 비동기 TCP/UDP/WebSocket 서비스를 쉽게 구현할 수 있습니다.
  • Workerman: Workerman은 WebSocket 및 TCP/UDP 통신을 지원하는 완전 비동기식 비차단 PHP 프레임워크입니다.

3. PHP 비동기 프로그래밍 예제

다음은 간단한 예제를 사용하여 PHP 비동기 프로그래밍의 사용을 소개합니다.

이 예에서는 Swoole 확장을 사용하여 간단한 TCP 서비스를 구현해 보겠습니다. TCP 서비스를 활성화한 후 클라이언트는 텔넷 도구를 통해 서버에 연결하고 서버에 메시지를 보낼 수 있습니다. 메시지를 받은 후 서버는 메시지를 클라이언트에 다시 보냅니다.

다음은 관련 코드 예입니다.

<?php
$server = new swoole_server('127.0.0.1', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
$server->set([
    'worker_num' => 4,
    'daemonize'  => false,
]);
$server->on('connect', function ($server, $fd) {
    echo "Client {$fd}: Connect.
";
});
$server->on('receive', function ($server, $fd, $from_id, $data) {
    $server->send($fd, 'Receive: ' . $data);
});
$server->on('close', function ($server, $fd) {
    echo "Client {$fd}: Close.
";
});
echo "Server Start.
";
$server->start();

위 코드에서는 먼저 새로운 swoole_server 함수를 통해 Swoole 서비스를 생성하고 IP 주소가 127.0.0.1이고 포트 번호가 9501인 4개의 작업자 프로세스를 설정했습니다. . 다음으로 클라이언트의 연결, 수신, 종료 이벤트에 각각 해당하는 3개의 콜백 함수를 등록했습니다. 클라이언트가 연결되면 Connect 메시지를 인쇄합니다. 클라이언트가 데이터를 보낼 때 클라이언트가 연결을 닫으면 Close 메시지를 인쇄합니다. 마지막으로 서비스를 시작하기 위해 Server Start 메시지를 출력합니다.

4. 요약

비동기 프로그래밍은 웹 애플리케이션의 성능과 동시성을 향상시킬 수 있는 PHP 웹 개발의 중요한 기술입니다. 이 기사에서는 PHP 비동기 프로그래밍의 개념과 구현을 소개하고 간단한 사용 예를 제공합니다. 독자들이 이 기사를 연구하여 비동기 프로그래밍의 사용에 대해 배우고 웹 개발 능력을 향상시킬 수 있기를 바랍니다.

위 내용은 PHP 초보자 가이드: 비동기 프로그래밍의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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