【PHP】AMPHP の Http2Parser の調査

2024/07/14に公開

AMPHP の HTTP/2 フレームを解析する機能をほかのフレームワークで使えないか調べてみた。AMPHP の HTTP パッケージ (amphp/http) には HTTP/2 フレームを解析するクラスである Http2Parser が含まれる。Http2Parser のコンストラクターには HpackHttp2Processor インターフェイスを継承するハンドラーを指定する必要がある。

Http2Processor には HTTP/2 フレームごとの処理を担う handleXXXX という形式のメソッドが定義される。

Http2Parserparse メソッドは与えられたデータに対してフレームの種類ごとに専用の処理メソッド(parseXXXX)に移譲する。それらのメソッドを通してハンドラーの handleXXXX メソッドが実行される。parse の戻り値は Generator である。

Http2Processor を継承するハンドラークラスの例は amphp/http-client では Http2ConnectionProcessor、amphp/http-server では Http2Driver である。

それぞれのハンドラークラスは Revolt\EventLoop を使用する一方で、リクエスト・レスポンスはそれぞれ独自のものを使用する。前者は Amp\Http\Client\Request, Response、後者は Amp\Http\Server\Request, Response である。

Http2ConnectionProcessor よりも Http2Driver のほうが実装のコード量が多い。

Discussion