Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PerlWebService使用HTTP::Server::Simple::CGI增加最大连接数_Perl_Web Services - Fatal编程技术网

PerlWebService使用HTTP::Server::Simple::CGI增加最大连接数

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

我正在运行一个小PerlWebService,它基于我在本页上找到的示例:(第一个示例)

然而,当很多客户端同时调用它时,看起来请求突然崩溃,运行Web服务的服务器上还有很多时间等待tcp连接,好像Web服务无法同时处理那么多连接

该模块或其他模块中是否有参数可用于扩展此功能? 还是一种为传入请求设置某种队列的方法

我的代码的某些部分,以帮助:

{
 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上)