Поддерживаемые функции

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 Connection Pooling

Прозрачный пул соединений для PDO через интеграцию с Async\Pool. Каждая корутина получает собственное соединение из пула с автоматическим управлением жизненным циклом.

MySQLi

ФункцияОписание
mysqli_connect()Неблокирующее подключение
mysqli_query()Выполнение запроса
mysqli_prepare()Подготовка запроса
mysqli_stmt_execute()Выполнение подготовленного запроса
mysqli_fetch_*()Получение результатов

PostgreSQL (нативный)

ФункцияОписание
pg_connect()Неблокирующее подключение
pg_query()Выполнение запроса
pg_prepare()Подготовка запроса
pg_execute()Выполнение подготовленного запроса
pg_fetch_*()Получение результатов

Каждый async-контекст использует отдельное соединение для безопасной конкурентности.


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()Мониторинг активности сокетов

Файловый и потоковый ввод-вывод

ФункцияОписание
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() — блокирующий системный вызов, который невозможно сделать неблокирующим через I/O-события libuv. Внутри корутины блокирующие операции (LOCK_SH, LOCK_EX) выполняются в пуле потоков libuv, позволяя другим корутинам продолжать работу во время ожидания блокировки. Неблокирующие блокировки (LOCK_NB) и разблокировки (LOCK_UN) выполняются напрямую без пула потоков.

Важно: таймауты для файлов и pipe-потоков. PHP изначально не поддерживает таймауты для операций чтения/записи файлов и pipe-потоков — стандартные fread(), fwrite() и другие функции могут блокироваться бесконечно. TrueAsync решает эту проблему: если для потока установлен таймаут (через stream_set_timeout()), операция чтения регистрирует одновременно IO-событие и таймер. Если таймер срабатывает раньше завершения IO — чтение отменяется, и корутина получает результат -1 (признак таймаута). Это работает только внутри корутин — вне корутин поведение остаётся стандартным.


Потоковые сокеты

ФункцияОписание
stream_socket_client()Создание клиентского соединения
stream_socket_server()Создание серверного сокета
stream_socket_accept()Принятие соединения
stream_select()Мониторинг активности потоков
stream_context_create()Создание контекста с поддержкой async

Ограничение: stream_select() с pipe-потоками (например, от proc_open()) не поддерживается в Windows. На Linux/macOS работает через event loop.


Запуск процессов

ФункцияОписание
proc_open()Открытие процесса с pipe-каналами
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

Файловые операции (метаданные)

ФункцияОписание
opendir() / readdir() / closedir()Работа с каталогами
unlink() / rename()Удаление и переименование файлов
mkdir() / rmdir()Создание и удаление каталогов
stat() / lstat()Информация о файлах
readlink()Чтение символических ссылок

Примечание: Файловые операции с метаданными на локальном диске выполняются за микросекунды. Их асинхронность имеет смысл только при работе с сетевыми файловыми системами (NFS).


Дальше что?