1

我正在使用 Apache 和 cgi 脚本实现 RESTful API,性能至关重要。我需要以最有效的方式将数据传输到 cgi 脚本。这意味着最少数量的临时文件或 RAM 缓冲。理想情况下,我会从 IP 数据包到 1MB RAM 缓冲区一次,然后再到我的目的地。搜索网络和这个博客,关于传输效率的信息很少。

经常提到 mod_perl,我理解那里的效率,因为 perl 解释器已优化为 Apache。但是,您从哪里可以获得有关缓冲对 cgi 脚本的 POST 请求的详细信息?

这是我遇到的一个具体问题:如果我使用 curl 发布一个只是文件上传的表单,那么 cgi 脚本不会从 STDIN 获取任何数据。我从文件中获取数据就好了,但它不是通过 STDIN,而是通过 url_param。我知道我正在做一个 POST,因为 $ENV 将它作为一个 POST。那么为什么我看不到 STDIN 数据呢?

第二个问题是是否有人知道关于不同传输类型性能的研究?

4

1 回答 1

1

为了提高效率,您可以使用 Apache2::Upload。它与 apache mod_perl 紧密结合,并使用 C libs (xs) 来加快速度。

它未经测试,但类似这样:

use Apache2::Upload;
open(my $out_fh,'>',outfile) or die $!;
binmode($out_fh);

my $req = Apache2::Request->new($r);
my $upload = $req->upload("foo"); 
my $bb = $upload->bb();
my $contents = '';my $length = '2048';my $offset = 0;
while ( $bb->READ($contents, $length, $offset) ){
   $offset += $length+1;
}
print $out_fh $contents;
于 2013-09-26T13:07:05.803 回答