프로젝트 소개

Swoole은 이벤트 기반, 비동기, 코루틴 기반 동시성 런타임을 제공하는 PHP 확장입니다. C 확장으로 작성되었으며 PECL을 통해 설치하거나 소스에서 컴파일할 수 있습니다. Linux, macOS, Cygwin 또는 WSL, PHP 8.2 이상, GCC 4.8 이상이 필요합니다. README에 설명된 핵심 기능: - 코루틴: 내장 코루틴 스케줄링을 통해 개발자가 동기식으로 보이는 PHP 코드를 작성하면서도 비동기적으로 실행할 수 있습니다. 코루틴은 초경량 스레드로 설명되며, 단일 프로세스에서 수천 개를 생성할 수 있습니다. - 런타임 훅: Swoole\Runtime::enableCoroutine()은 Zend VM 스트림 함수 포인터를 대체하여 차단 I/O 함수가 비차단 및 코루틴 스케줄링으로 동작하게 합니다. 지원되는 통합에는 ext-curl(Symfony 및 Guzzle 포함), ext-redis, ext-mysqli, 여러 PDO 드라이버(MySQL, PostgreSQL, SQLite, Oracle, ODBC), TCP/UDP/UDG/Unix/SSL-TLS 및 파일 시스템 API를 통한 스트림 함수, ext-sockets, ext-soap, sleep 함수, proc_open, gethostbyname, shell_exec, exec, 그리고 fread/fopen/fsockopen/fwrite/flock과 같은 파일 함수가 포함됩니다. - 서버: HTTP, WebSocket, HTTP/2 및 TCP 서버는 하나의 이벤트 루프를 공유할 수 있습니다. WebSocket 서버 예제는 두 번째 포트에서 원시 TCP도 수신합니다. 네트워크 계층은 epoll/kqueue를 사용합니다. - 클라이언트: HTTP, WebSocket, HTTP/2 및 TCP용 코루틴 클라이언트가 표시되며, DNS, 요청 및 응답 처리가 자동으로 스케줄링됩니다. - 채널: Swoole\Coroutine\Channel은 코루틴 간 CSP 스타일 통신을 제공하며, Redis 연결 풀 및 생산자/소비자 예제로 시연됩니다. - 타이머: Swoole\Timer::tick, after, clear 및 exists, 그리고 코루틴 기반 슬리핑 루프. - 혼합 워크로드: README는 런타임 훅을 사용하여 단일 프로세스 내에서 10K 슬립, 파일 읽기/쓰기, PDO/MySQLi 쿼리, TCP/UDP 서버-클라이언트 교환을 보여줍니다. 설치 옵션은 PECL(pecl install swoole) 또는 소스 빌드(phpize, configure, make, make install)이며, --enable-openssl, --enable-sockets, --enable-mysqlnd 및 --enable-swoole-curl과 같은 선택적 플래그가 있습니다. 비동기 클라이언트와 API는 버전 4.3.0부터 별도의 swoole_async 확장으로 이동되었습니다. 이 프로젝트는 Apache 2.0 라이선스로 제공되며 문서는 wiki.swoole.com, IDE 헬퍼 저장소, Awesome Swoole 목록, Twitter, Discord 및 중국어 커뮤니티의 커뮤니티 채널을 안내합니다.