Підтримувані функції

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

Прозорий пул з'єднань для 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).


Що далі?

  • spawn() — створення корутин
  • await() — очікування результату
  • Корутини — концепції та приклади