지원 함수

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()스트림 간 복사
flock()파일 잠금 (스레드 풀 사용)

중요: flock()은 스레드 풀을 사용합니다.flock() 함수는 libuv I/O 이벤트로 논블로킹으로 만들 수 없는 블로킹 시스템 호출입니다. 코루틴 내부에서 블로킹 잠금 작업(LOCK_SH, LOCK_EX)은 libuv 스레드 풀로 오프로드되어 잠금을 기다리는 동안 다른 코루틴이 계속 실행될 수 있습니다. 논블로킹 잠금(LOCK_NB)과 잠금 해제(LOCK_UN)는 스레드 풀 없이 직접 실행됩니다.

중요: 파일 및 파이프 스트림의 타임아웃. 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 ODBCODBC 드라이버
PDO OracleOracle 드라이버
PDO SQLiteSQLite 드라이버
PDO FirebirdFirebird 드라이버
MongoDBMongoDB 클라이언트

파일 작업 (메타데이터)

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

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


다음 단계