sample.cの h2o + libuv + OpenSSL 構成を、PHP拡張(PECL/PIE 形式)として移植する。- 最小限の HTTP サーバー機能を提供する。
- PIE でインストール可能なパッケージ構成にする(
composer.jsonのbuild-pathはext)。
- PHP 関数:
h2o_server_run(array $options = []): bool
- 実装する機能:
- TCP listen(デフォルト
0.0.0.0:8080) - HTTP リクエスト受信(method/path/headers/body-size を取得)
- 固定レスポンス返却(
200 OK,text/plain)
- TCP listen(デフォルト
- オプション(最小):
host,port,response_bodytls_cert,tls_key(指定時のみ TLS 有効)
- 初期ターゲット:
- CLI SAPI での利用(ブロッキング実行)
- マルチワーカー管理
- PHP コールバックによる動的レスポンス
- 高度なルーティング
- Windows 向け最適化
- ZTS サポート(NTS 優先)
dump_req:- C内部のデバッグログ関数として
ext/h2o_server.cに移植
- C内部のデバッグログ関数として
on_req:- 拡張内部ハンドラ
php_h2o_on_reqとして移植 - 固定レスポンス +
Content-Type設定
- 拡張内部ハンドラ
setup_ssl:tls_cert/tls_key指定時に実行- ALPN/NPN 設定は利用可能なら有効化
on_uv_connection:- 受け入れ処理をそのまま分離移植
main:h2o_server_run()に置換
ext/config.m4ext/config.w32(雛形のみ)ext/php_h2o.hext/h2o.c(PHP関数エントリ、MINIT/MINFO)ext/h2o_server.c(h2o/libuv/OpenSSL 連携)ext/h2o_server.hext/tests/*.phpt
- フェーズ1: ビルド骨格
config.m4でh2o,uv,ssl,cryptoを検出phpize && ./configure && makeが通る最小拡張を作成
- フェーズ2: サーバー起動
h2o_server_run()から libuv loop を起動- host/port オプションを反映
- フェーズ3: リクエスト処理
sample.c相当のon_reqを移植- 固定レスポンスを返却
- フェーズ4: TLS(任意)
- cert/key が指定された場合のみ SSL 初期化
- HTTP/2 ALPN を有効化
- フェーズ5: テストと安定化
- PHPT: 起動、応答コード、レスポンス本文、TLS(任意)
- エラー時のメモリ解放と終了処理を確認
- 単体(PHPT):
- 関数存在確認
- 不正オプション時の例外/警告
- 結合:
curl http://127.0.0.1:8080/で 200 応答- TLS 有効時に
curl -k https://127.0.0.1:8443/応答
- 回帰:
- 連続リクエスト時のクラッシュ・リーク確認
- ルート
composer.json:type: php-extphp-ext.extension-name: h2ophp-ext.build-path: ext
- インストール例(ローカル開発):
pie install
pie installでビルドが開始できる- 拡張をロード後、
h2o_server_run()が利用できる - HTTP リクエストに対して
200 OKを返す ext/testsの主要 PHPT が通る
- 依存ライブラリのパス差異:
configure-optionsで prefix 指定可能にする
- イベントループの終了制御:
- SIGINT で停止できるハンドラを実装
- ABI/バージョン差異:
h2oAPI差分は#ifガードで吸収