Funciones soportadas
TrueAsync adapta más de 70 funciones estándar de PHP para operación no bloqueante dentro de corrutinas.
Todas las funciones listadas se vuelven automáticamente asíncronas cuando se llaman dentro de una corrutina.
Fuera de una corrutina, funcionan como siempre.
DNS
| Función |
Descripción |
gethostbyname() |
Resolver nombre de host a dirección IP |
gethostbyaddr() |
Resolución inversa de dirección IP a nombre de host |
gethostbynamel() |
Obtener lista de direcciones IP para un nombre de host |
Bases de datos
PDO MySQL
| Función |
Descripción |
PDO::__construct() |
Conexión no bloqueante |
PDO::prepare() |
Preparar consulta |
PDO::exec() |
Ejecutar consulta |
PDOStatement::execute() |
Ejecutar consulta preparada |
PDOStatement::fetch() |
Obtener resultados |
PDO PgSQL
| Función |
Descripción |
PDO::__construct() |
Conexión no bloqueante |
PDO::prepare() |
Preparar consulta |
PDO::exec() |
Ejecutar consulta |
PDOStatement::execute() |
Ejecutar consulta preparada |
PDOStatement::fetch() |
Obtener resultados |
Pool de conexiones PDO
Pool de conexiones transparente para PDO mediante integración con Async\Pool.
Cada corrutina recibe su propia conexión del pool con gestión automática del ciclo de vida.
MySQLi
| Función |
Descripción |
mysqli_connect() |
Conexión no bloqueante |
mysqli_query() |
Ejecutar consulta |
mysqli_prepare() |
Preparar consulta |
mysqli_stmt_execute() |
Ejecutar consulta preparada |
mysqli_fetch_*() |
Obtener resultados |
PostgreSQL (nativo)
| Función |
Descripción |
pg_connect() |
Conexión no bloqueante |
pg_query() |
Ejecutar consulta |
pg_prepare() |
Preparar consulta |
pg_execute() |
Ejecutar consulta preparada |
pg_fetch_*() |
Obtener resultados |
Cada contexto async utiliza una conexión separada para concurrencia segura.
CURL
| Función |
Descripción |
curl_exec() |
Ejecutar solicitud |
curl_multi_exec() |
Ejecutar múltiples solicitudes |
curl_multi_select() |
Esperar actividad |
curl_multi_getcontent() |
Obtener contenido |
curl_setopt() |
Establecer opciones |
curl_getinfo() |
Obtener información de solicitud |
curl_error() |
Obtener error |
curl_close() |
Cerrar handle |
Sockets
| Función |
Descripción |
socket_create() |
Crear socket |
socket_create_pair() |
Crear par de sockets |
socket_connect() |
Conectar |
socket_accept() |
Aceptar conexión |
socket_read() |
Leer datos |
socket_write() |
Escribir datos |
socket_send() |
Enviar datos |
socket_recv() |
Recibir datos |
socket_sendto() |
Enviar a dirección |
socket_recvfrom() |
Recibir de dirección |
socket_bind() |
Vincular a dirección |
socket_listen() |
Escuchar |
socket_select() |
Monitorear actividad de sockets |
E/S de archivos y flujos
| Función |
Descripción |
fopen() |
Abrir archivo |
fclose() |
Cerrar archivo |
fread() |
Leer de archivo |
fwrite() |
Escribir en archivo |
fgets() |
Leer línea |
fgetc() |
Leer carácter |
fgetcsv() |
Leer línea CSV |
fputcsv() |
Escribir línea CSV |
fseek() |
Establecer posición |
ftell() |
Obtener posición |
rewind() |
Restablecer posición |
ftruncate() |
Truncar archivo |
fflush() |
Vaciar búferes |
fscanf() |
Lectura formateada |
file_get_contents() |
Leer archivo completo |
file_put_contents() |
Escribir archivo completo |
file() |
Leer archivo en array |
copy() |
Copiar archivo |
tmpfile() |
Crear archivo temporal |
readfile() |
Mostrar archivo |
fpassthru() |
Mostrar resto del archivo |
stream_get_contents() |
Leer resto del flujo |
stream_copy_to_stream() |
Copiar entre flujos |
flock() |
Bloqueo de archivos (vía pool de hilos) |
Importante: flock() usa el pool de hilos.
La función flock() es una llamada al sistema bloqueante que no se puede hacer no-bloqueante mediante eventos de I/O de libuv.
Dentro de una corrutina, las operaciones de bloqueo (LOCK_SH, LOCK_EX) se delegan al pool de hilos de libuv,
permitiendo que otras corrutinas continúen ejecutándose mientras se espera el bloqueo.
Los bloqueos no-bloqueantes (LOCK_NB) y desbloqueos (LOCK_UN) se ejecutan directamente sin el pool de hilos.
Importante: Timeouts para archivos y flujos pipe.
PHP no soporta nativamente timeouts para operaciones de lectura/escritura en archivos y flujos pipe — las funciones estándar fread(), fwrite() y otras pueden bloquearse indefinidamente.
TrueAsync resuelve esto: si se establece un timeout para un flujo (mediante stream_set_timeout()),
la operación de lectura registra simultáneamente un evento IO y un temporizador. Si el temporizador se dispara antes de que la IO se complete,
la lectura se cancela y la corrutina recibe un resultado de -1 (indicador de timeout).
Esto solo funciona dentro de corrutinas — fuera de ellas, el comportamiento es el estándar.
Sockets de flujo
| Función |
Descripción |
stream_socket_client() |
Crear conexión cliente |
stream_socket_server() |
Crear socket servidor |
stream_socket_accept() |
Aceptar conexión |
stream_select() |
Monitorear actividad de flujos |
stream_context_create() |
Crear contexto async |
Limitación: stream_select() con flujos pipe (ej. de proc_open()) no está soportado en Windows. En Linux/macOS funciona nativamente a través del bucle de eventos.
Ejecución de procesos
| Función |
Descripción |
proc_open() |
Abrir proceso con pipes |
proc_close() |
Cerrar proceso |
exec() |
Ejecutar comando externo |
shell_exec() |
Ejecutar comando shell |
system() |
Ejecutar comando del sistema |
passthru() |
Ejecutar con salida directa |
Importante: proc_close() y pclose() bloquean la corrutina.
Llamar a proc_close() o pclose() espera a que el proceso hijo termine.
Dentro de una corrutina, esto bloquea la corrutina actual hasta que el proceso termine — las demás corrutinas siguen ejecutándose.
Lo mismo ocurre en llamadas implícitas a través de destructores: si una variable con un recurso de proceso sale del ámbito
o es destruida por el recolector de basura, el destructor llama a pclose(), lo que bloquea la corrutina donde se ejecuta la recolección de basura.
Recomendación: cierre siempre los procesos explícitamente con proc_close() en lugar de depender de los destructores,
para controlar en qué corrutina se producirá el bloqueo.
Temporizadores y retardos
| Función |
Descripción |
sleep() |
Retardo en segundos |
usleep() |
Retardo en microsegundos |
time_nanosleep() |
Retardo con precisión de nanosegundos |
time_sleep_until() |
Esperar hasta marca de tiempo |
Búfer de salida
Cada corrutina recibe un búfer de salida aislado.
| Función |
Descripción |
ob_start() |
Iniciar búfer |
ob_flush() |
Vaciar búfer |
ob_clean() |
Limpiar búfer |
ob_get_contents() |
Obtener contenido del búfer |
ob_end_clean() |
Finalizar búfer |
Aún no soportado
Funciones planificadas para implementación o aún no adaptadas.
DNS
| Función |
Descripción |
dns_check_record() / checkdnsrr() |
Verificar registro DNS |
dns_get_mx() / getmxrr() |
Obtener registros MX |
dns_get_record() |
Obtener registros DNS |
Bases de datos
| Extensión |
Descripción |
| PDO ODBC |
Controlador ODBC |
| PDO Oracle |
Controlador Oracle |
| PDO SQLite |
Controlador SQLite |
| PDO Firebird |
Controlador Firebird |
| MongoDB |
Cliente MongoDB |
| Función |
Descripción |
opendir() / readdir() / closedir() |
Recorrido de directorios |
unlink() / rename() |
Eliminación y renombrado de archivos |
mkdir() / rmdir() |
Creación y eliminación de directorios |
stat() / lstat() |
Información de archivos |
readlink() |
Lectura de enlaces simbólicos |
Nota: Las operaciones de metadatos de archivos en disco local se completan en microsegundos. Su asincronía solo tiene sentido para sistemas de archivos en red (NFS).
¿Qué sigue?