TrueAsync ServerTrueAsync Server : démarrage rapide

Démarrage rapide TrueAsync Server ​

(PHP 8.6+, true_async_server 0.6+)

En cinq minutes : installation de l'extension, handler minimal et vérification de la réponse.

Le serveur est livré avec TrueAsync PHP dans toutes les builds prêtes à l'emploi. Si vous avez déjà TrueAsync PHP installé via l'installateur, l'image Docker ou le ZIP Windows, il suffit d'activer l'extension dans php.ini — pas besoin de recompiler. Si vous souhaitez la construire manuellement à partir des sources (votre propre version de PHP, votre propre chaîne de dépendances), voir la section Compilation depuis les sources.

Docker ​

Le moyen le plus rapide de tester. L'image prête à l'emploi contient PHP avec TrueAsync et l'extension true_async_server :

bash
docker run --rm -p 8080:8080 \
  -v $PWD/hello.php:/app/hello.php \
  -w /app \
  trueasync/php-true-async:latest \
  php hello.php

Tags disponibles :

TagDescription
trueasync/php-true-async:latestUbuntu 24.04 + CLI + FPM, dernière version stable
trueasync/php-true-async:latest-alpineAlpine 3.20, lightweight
trueasync/php-true-async:0.6.7-php8.6Version spécifique

Liste complète des tags et anciennes versions sur la page de téléchargement.

Linux / macOS — installation par script ​

Le script télécharge les sources, compile TrueAsync PHP avec l'extension serveur et installe le tout dans ~/.php-trueasync/bin/ :

bash
# Linux (Ubuntu / Debian)
curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-linux.sh | bash

# macOS (Apple Silicon / Intel ; Homebrew requis)
curl -fsSL https://raw.githubusercontent.com/true-async/releases/master/installer/build-macos.sh | bash

Après installation, php --ri true_async_server affichera la liste des protocoles et les versions des bibliothèques.

Paramètres (à passer via variables d'environnement avant bash ou en mode non interactif) :

bash
curl -fsSL .../build-linux.sh | NO_INTERACTIVE=true bash

Les options et le contrôle de l'installation sont décrits sur la page de téléchargement.

Windows — ZIP ​

La build prête à l'emploi de TrueAsync PHP pour Windows x64 contient l'extension serveur. Téléchargez le ZIP depuis GitHub Releases (fichier de la forme php-trueasync-X.Y.Z-php8.6-windows-x64.zip), décompressez, ajoutez le répertoire au PATH et activez dans php.ini :

ini
extension=true_async_server

Vérification :

cmd
php --ri true_async_server

Le batching outbound HTTP/3 utilise UDP_SEGMENT (GSO Linux), il n'y a pas d'équivalent sous Windows. Le débit HTTP/3 sous Windows est plus bas ; HTTP/1.1, HTTP/2 et TLS fonctionnent sans régression.

Activation de l'extension ​

Dans toutes les variantes d'installation, il faut ajouter dans php.ini :

ini
extension=true_async_server

Et vérifier :

bash
php --ri true_async_server

La sortie listera les protocoles (HTTP/1.1, HTTP/2, HTTP/3, TLS 1.2/1.3) et les versions runtime d'OpenSSL, nghttp2, ngtcp2, nghttp3, libuv.


Compilation depuis les sources ​

Si les builds standard ne conviennent pas, il est possible de compiler manuellement.

Prérequis ​

ComposantMinimumPourquoiNote
PHP8.6basebuild depuis TrueAsync php-src
ext-asyncdernier mainevent-loop, udp_bind pour HTTP/3
OpenSSL3.0 (3.5 pour HTTP/3)TLS, HTTP/3HTTP/3 nécessite l'API QUIC TLS d'OpenSSL 3.5
libnghttp21.57HTTP/2floor pour CVE-2023-44487
libngtcp2 + libngtcp2_crypto_ossl1.22HTTP/3backend crypto précisément _ossl
libnghttp31.15HTTP/3
libuvvia TrueAsyncbasenon liée directement par l'extension
llhttp9.3.0HTTP/1.1vendored dans deps/llhttp/

Les paquets de distribution d'OpenSSL/ngtcp2/nghttp3 sont en général trop anciens. Il est recommandé de compiler OpenSSL 3.5 + ngtcp2 + nghttp3 depuis les sources sous un préfixe commun (/usr/local ou /opt/h3) et de l'indiquer dans PKG_CONFIG_PATH lors du ./configure.

Linux ​

1. Dépendances ​

bash
sudo apt-get install -y \
    build-essential autoconf bison re2c pkg-config \
    libcmocka-dev   # pour --enable-tests

OpenSSL 3.5, ngtcp2 1.22+ et nghttp3 1.15+ sont à ce jour absents des dépôts de la plupart des distributions, on les compile donc sous /usr/local :

bash
# OpenSSL 3.5 avec QUIC
git clone --branch openssl-3.5 https://github.com/openssl/openssl
cd openssl && ./Configure --prefix=/usr/local && make -j$(nproc) && sudo make install
sudo ldconfig

# ngtcp2 (backend crypto OpenSSL)
git clone --recursive https://github.com/ngtcp2/ngtcp2
cd ngtcp2 && autoreconf -i \
  && ./configure --prefix=/usr/local --with-openssl --with-libnghttp3 \
                 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig \
  && make -j$(nproc) && sudo make install

# nghttp3
git clone --recursive https://github.com/ngtcp2/nghttp3
cd nghttp3 && autoreconf -i \
  && ./configure --prefix=/usr/local && make -j$(nproc) && sudo make install

2. Compilation de l'extension ​

bash
git clone https://github.com/true-async/server true-async-server
cd true-async-server
phpize
./configure \
    --enable-http-server \
    --with-php-config="$(which php-config)" \
    PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
make -j$(nproc)
sudo make install

HTTP/2 et HTTP/3 sont activés automatiquement quand les dépendances sont présentes (libnghttp2 ≥ 1.57 pour H2 ; libngtcp2 ≥ 1.22, libnghttp3 ≥ 1.15, OpenSSL ≥ 3.5 pour H3). Pour désactiver : --disable-http2, --disable-http3.

Drapeaux supplémentaires :

DrapeauEffet
--enable-testsbuild des tests unitaires avec libcmocka
--enable-coverageinstrumentation gcov
--without-opensslsans TLS (désactive aussi HTTP/3)
--enable-brotliactiver Brotli (autodetect)
--enable-zstdactiver zstd (autodetect)

Ensuite il ne reste plus qu'à activer l'extension dans php.ini et vérifier — voir la section Activation de l'extension ci-dessus.

Windows ​

Compilation via le PHP-SDK standard. Les .lib statiques pour OpenSSL 3.5, nghttp2, ngtcp2, nghttp3 doivent être disponibles sous deps\ dans l'arborescence PHP-SDK.

cmd
REM depuis Visual Studio x64 Native Tools prompt
phpsdk_buildtree phpdev
git clone https://github.com/true-async/php-src.git
cd php-src
git clone https://github.com/true-async/server ext\true_async_server

buildconf.bat
configure.bat ^
    --disable-all ^
    --enable-cli ^
    --enable-async=shared ^
    --enable-http-server=shared ^
    --with-openssl=shared

nmake

Le php_true_async_server.dll final apparaîtra dans x64\Release_TS\ (ou Release\ pour NTS). Copiez-le dans ext\ et ajoutez extension=true_async_server dans php.ini.

Serveur minimal ​

php
<?php
// hello.php

use TrueAsync\HttpServer;
use TrueAsync\HttpServerConfig;

$server = new HttpServer(
    (new HttpServerConfig())
        ->addListener('0.0.0.0', 8080)
);

$server->addHttpHandler(function ($request, $response) {
    $response
        ->setStatusCode(200)
        ->setHeader('Content-Type', 'text/plain')
        ->setBody('Hello, World!');
});

$server->start();   // bloque jusqu'à stop()

Lancement :

bash
php hello.php

Vérification :

bash
curl -i http://localhost:8080/
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 13

Hello, World!

Suite ​