PerlWebService使用HTTP::Server::Simple::CGI增加最大连接数
我正在运行一个小PerlWebService,它基于我在本页上找到的示例:(第一个示例) 然而,当很多客户端同时调用它时,看起来请求突然崩溃,运行Web服务的服务器上还有很多时间等待tcp连接,好像Web服务无法同时处理那么多连接 该模块或其他模块中是否有参数可用于扩展此功能? 还是一种为传入请求设置某种队列的方法 我的代码的某些部分,以帮助:PerlWebService使用HTTP::Server::Simple::CGI增加最大连接数,perl,web-services,Perl,Web Services,我正在运行一个小PerlWebService,它基于我在本页上找到的示例:(第一个示例) 然而,当很多客户端同时调用它时,看起来请求突然崩溃,运行Web服务的服务器上还有很多时间等待tcp连接,好像Web服务无法同时处理那么多连接 该模块或其他模块中是否有参数可用于扩展此功能? 还是一种为传入请求设置某种队列的方法 我的代码的某些部分,以帮助: { package TACWebService; use HTTP::Server::Simple::CGI; use base qw(HTTP
{
package TACWebService;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
use Cwd 'abs_path';
use POSIX;
use DBI;
use warnings;
.........
my %dispatch = (
'/insertunix' => \&resp_insertunix,
'/insertwin' => \&resp_insertwin,
'/getpwdate' => \&resp_getpwdate,
);
# ---------------------------------------------------------------------
# Requests Handling
# ---------------------------------------------------------------------
sub handle_request {
my $self = shift;
my $cgi = shift;
my $path = $cgi->path_info();
my $handler = $dispatch{$path};
if (ref($handler) eq "CODE") {
print "HTTP/1.0 200 OK\r\n";
$handler->($cgi);
} else {
print "HTTP/1.0 404 Not found\r\n";
print $cgi->header,
$cgi->start_html('Not found'),
$cgi->h1('Not found'),
$cgi->end_html;
}
}
sub resp_insertwin {
my $cgi = shift; # CGI.pm object
return if !ref $cgi;
....
} else {
print $cgi->header("text/plain"), "INSERT";
}
.....
# ---------------------------------------------------------------------
# WebService Start in background
# ---------------------------------------------------------------------
my $pid = TACWebService->new($TACWebService::conf{tac_ws_port})->background();
print "Use 'kill $pid' to stop TAC WebService.\n";
客户端本身正在使用LWP::UserAgent,如下所示:
my $ua = LWP::UserAgent->new();
$ua->timeout($timeout);
my $response = $ua->post($TAC_Url,
[
'args' => $here,
]
if (!$response->is_success) {
print "Timeout while connecting to $TAC_Url\n";
} else {
my $content = $response->as_string();
print $content if (grep(/INSERT_/,$content));
}
描述确切的问题将是复杂的。简言之:客户端是发送其用户数据库(用户帐户)的Unix服务器。当很多客户端同时发送这个用户数据库时,我可以看到Web服务接收到一半的数据,并在几个帐户后回答“超时”(可能是因为它在某种程度上过载了)
再次感谢问题是,客户端等待服务器响应的时间太长了。要解决这个问题,您必须多次启动服务器。最简单的解决方法是添加
sub net_server { 'Net::Server::PreFork' }
对于您的包,TACWebService和HTTP::Server::Simple::CGI将完成其余的工作
或者可以使用HTTP::Server::Simple::CGI::PreFork。请参见问题似乎来自客户端发布的POST(脚本挂起在我的$response=$ua->POST上)