⛳
【PHP】AMPHP の Http2Parser の調査
AMPHP の HTTP/2 フレームを解析する機能をほかのフレームワークで使えないか調べてみた。AMPHP の HTTP パッケージ (amphp/http) には HTTP/2 フレームを解析するクラスである Http2Parser が含まれる。Http2Parser のコンストラクターには Hpack と Http2Processor インターフェイスを継承するハンドラーを指定する必要がある。
Http2Processor には HTTP/2 フレームごとの処理を担う handleXXXX という形式のメソッドが定義される。
Http2Parser の parse メソッドは与えられたデータに対してフレームの種類ごとに専用の処理メソッド(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