지원 함수

TrueAsync는 70개 이상의 표준 PHP 함수를 코루틴 내에서 논블로킹 동작하도록 변환합니다. 나열된 모든 함수는 코루틴 내부에서 호출될 때 자동으로 비동기로 동작합니다. 코루틴 외부에서는 평소와 같이 동작합니다.


DNS

함수 설명
gethostbyname() 호스트 이름을 IP 주소로 확인
gethostbyaddr() IP 주소를 호스트 이름으로 역확인
gethostbynamel() 호스트 이름에 대한 IP 주소 목록 가져오기

데이터베이스

PDO MySQL

함수 설명
PDO::__construct() 논블로킹 연결
PDO::prepare() 구문 준비
PDO::exec() 쿼리 실행
PDOStatement::execute() 준비된 구문 실행
PDOStatement::fetch() 결과 가져오기

PDO PgSQL

함수 설명
PDO::__construct() 논블로킹 연결
PDO::prepare() 구문 준비
PDO::exec() 쿼리 실행
PDOStatement::execute() 준비된 구문 실행
PDOStatement::fetch() 결과 가져오기

PDO 연결 풀링

Async\Pool 통합을 통한 PDO의 투명한 연결 풀링입니다. 각 코루틴은 자동 수명 주기 관리가 적용된 풀에서 자체 연결을 받습니다.

MySQLi

함수 설명
mysqli_connect() 논블로킹 연결
mysqli_query() 쿼리 실행
mysqli_prepare() 구문 준비
mysqli_stmt_execute() 준비된 구문 실행
mysqli_fetch_*() 결과 가져오기

PostgreSQL (네이티브)

함수 설명
pg_connect() 논블로킹 연결
pg_query() 쿼리 실행
pg_prepare() 구문 준비
pg_execute() 준비된 구문 실행
pg_fetch_*() 결과 가져오기

각 비동기 컨텍스트는 안전한 동시성을 위해 별도의 연결을 사용합니다.


CURL

함수 설명
curl_exec() 요청 실행
curl_multi_exec() 다중 요청 실행
curl_multi_select() 활동 대기
curl_multi_getcontent() 콘텐츠 가져오기
curl_setopt() 옵션 설정
curl_getinfo() 요청 정보 가져오기
curl_error() 오류 가져오기
curl_close() 핸들 닫기

소켓

함수 설명
socket_create() 소켓 생성
socket_create_pair() 소켓 쌍 생성
socket_connect() 연결
socket_accept() 연결 수락
socket_read() 데이터 읽기
socket_write() 데이터 쓰기
socket_send() 데이터 전송
socket_recv() 데이터 수신
socket_sendto() 주소로 전송
socket_recvfrom() 주소에서 수신
socket_bind() 주소에 바인드
socket_listen() 수신 대기
socket_select() 소켓 활동 모니터링

파일 및 스트림 I/O

함수 설명
fopen() 파일 열기
fclose() 파일 닫기
fread() 파일에서 읽기
fwrite() 파일에 쓰기
fgets() 줄 읽기
fgetc() 문자 읽기
fgetcsv() CSV 줄 읽기
fputcsv() CSV 줄 쓰기
fseek() 위치 설정
ftell() 위치 가져오기
rewind() 위치 초기화
ftruncate() 파일 자르기
fflush() 버퍼 플러시
fscanf() 형식화된 읽기
file_get_contents() 전체 파일 읽기
file_put_contents() 전체 파일 쓰기
file() 파일을 배열로 읽기
copy() 파일 복사
tmpfile() 임시 파일 생성
readfile() 파일 출력
fpassthru() 나머지 파일 출력
stream_get_contents() 나머지 스트림 읽기
stream_copy_to_stream() 스트림 간 복사

중요: 파일 및 파이프 스트림의 타임아웃. PHP는 파일 및 파이프 스트림의 읽기/쓰기 작업에 대한 타임아웃을 기본적으로 지원하지 않습니다 — 표준 fread(), fwrite() 등의 함수는 무한정 차단될 수 있습니다. TrueAsync는 이 문제를 해결합니다: 스트림에 타임아웃이 설정되면(stream_set_timeout() 사용), 읽기 작업은 IO 이벤트와 타이머를 동시에 등록합니다. 타이머가 IO 완료보다 먼저 발동하면, 읽기가 취소되고 코루틴은 -1 결과를 받습니다(타임아웃 표시). 이 기능은 코루틴 내부에서만 작동합니다 — 코루틴 외부에서는 표준 동작이 유지됩니다.


스트림 소켓

함수 설명
stream_socket_client() 클라이언트 연결 생성
stream_socket_server() 서버 소켓 생성
stream_socket_accept() 연결 수락
stream_select() 스트림 활동 모니터링
stream_context_create() 비동기 인식 컨텍스트 생성

제한 사항: 파이프 스트림(예: proc_open()에서)을 사용하는 stream_select()는 Windows에서 지원되지 않습니다. Linux/macOS에서는 이벤트 루프를 통해 네이티브로 동작합니다.


프로세스 실행

함수 설명
proc_open() 파이프와 함께 프로세스 열기
proc_close() 프로세스 닫기
exec() 외부 명령 실행
shell_exec() 셸 명령 실행
system() 시스템 명령 실행
passthru() 직접 출력과 함께 실행

중요: proc_close()pclose()는 코루틴을 차단합니다. proc_close() 또는 pclose()를 호출하면 자식 프로세스가 종료될 때까지 기다립니다. 코루틴 내부에서는 프로세스가 종료될 때까지 현재 코루틴을 차단합니다 — 다른 코루틴은 계속 실행됩니다. 소멸자를 통한 암시적 호출에서도 동일한 현상이 발생합니다: 프로세스 리소스를 보유한 변수가 범위를 벗어나거나 가비지 컬렉터에 의해 소멸되면, 소멸자가 pclose()를 호출하여 가비지 컬렉션이 실행 중인 코루틴을 차단합니다.

권장 사항: 소멸자에 의존하지 말고 항상 proc_close()를 통해 명시적으로 프로세스를 닫으세요. 그래야 어떤 코루틴이 차단될지 제어할 수 있습니다.


타이머 및 지연

함수 설명
sleep() 초 단위 지연
usleep() 마이크로초 단위 지연
time_nanosleep() 나노초 정밀도 지연
time_sleep_until() 타임스탬프까지 대기

출력 버퍼링

각 코루틴은 격리된 출력 버퍼를 받습니다.

함수 설명
ob_start() 버퍼링 시작
ob_flush() 버퍼 플러시
ob_clean() 버퍼 정리
ob_get_contents() 버퍼 내용 가져오기
ob_end_clean() 버퍼링 종료

아직 지원되지 않는 기능

구현이 계획되었거나 아직 변환되지 않은 함수입니다.

DNS

함수 설명
dns_check_record() / checkdnsrr() DNS 레코드 확인
dns_get_mx() / getmxrr() MX 레코드 가져오기
dns_get_record() DNS 리소스 레코드 가져오기

데이터베이스

확장 설명
PDO ODBC ODBC 드라이버
PDO Oracle Oracle 드라이버
PDO SQLite SQLite 드라이버
PDO Firebird Firebird 드라이버
MongoDB MongoDB 클라이언트

파일 작업 (메타데이터)

함수 설명
flock() 파일 잠금
opendir() / readdir() / closedir() 디렉토리 탐색
unlink() / rename() 파일 삭제 및 이름 변경
mkdir() / rmdir() 디렉토리 생성 및 삭제
stat() / lstat() 파일 정보
readlink() 심볼릭 링크 읽기

참고: 로컬 디스크의 파일 메타데이터 작업은 마이크로초 안에 완료됩니다. 비동기로 만드는 것은 네트워크 파일 시스템(NFS)에서만 의미가 있습니다.


다음 단계