HTTP::Parser::XS - a PSGI compatible, fast http parser
んー、と思って、書いた。GitHub - kazuho/p5-http-parser-xs: a fast http parser
BLURB は、
- PSGI のリクエストオブジェクトを返す
- 高速
- 同期 httpd, 非同期 httpd のどちらを実装する際にも使用可能
- POST コンテンツのハンドリングはご自分で
- いったんファイルに入れたり、いろいろ要件があるし、パース作業は発生しないので Perl でもあまり遅くならないため
てな感じです。以下ベンチマーク。
$ ./http-parser-vs-xs-benchmark.pl Rate HTTP::Parser HTTP::Parser::XS HTTP::Parser 2978/s -- -95% HTTP::Parser::XS 54348/s 1725% --
ベンチマークに使ったコードは、以下のとおり。
#! /usr/bin/perl use strict; use warnings; use Benchmark qw(cmpthese); use HTTP::Parser; use HTTP::Parser::XS qw(parse_http_request); my $req = "GET / HTTP/1.0\r\n\r\n"; my $http_parser = HTTP::Parser->new(); my %xs_env; cmpthese(100000, { 'HTTP::Parser' => sub { my $status = $http_parser->add($req); if ($status == 0) { $http_parser->request(); } else { die "oh!\n"; } }, 'HTTP::Parser::XS' => sub { my $len = parse_http_request($req, \%xs_env); if ($len >= 0) { # ok } else { die "agh!\n"; } }, });