cgi文件上传优化

时间:2013-09-26 00:54:40

标签: perl curl

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

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

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

第二个问题是,是否有人知道有关不同转移类型的表现的研究?

1 个答案:

答案 0 :(得分: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;