天天看點

[NPWP筆記]多線程伺服器

采用一個主線程負責接收來自用戶端的連接配接請求,對于每一個用戶端的請求,由以一個線程進行處理。這樣客戶的連接配接于客戶的事務處理分别在不同的線程,主線程建立完成事務處理線程之後,将不再對其進行任何控制。事務處理線程負責來自用戶端的請求,将接收到的内容顯示到STDOUT。因為每一個客戶的請求都會導緻一個事務線程的建立與銷毀,是以在效率上會有所影響。

 #!/usr/bin/perl

use 5.006;

use strict;

use warnings;

use threads;

use IO::Socket;

my $host = "localhost";

my $port = 27002;

my $quit = 0;

$SIG{INT} = sub{$quit++};

my $sock = IO::Socket::INET->new(Listen => 20,

LocalPort => $port,

Timeout => 60*60,

Reuse => 1

)

or die "can not create listen sock:$@";

warn "waiting for incoming connections on port $port/n";

while(!$quit){

next unless my $session = $sock->accept;

my $t = threads->create(/&proccess_connection,$session);

$t->detach;

}

close $sock;

#thread subroutine,it print parameters

sub proccess_connection{

my $s = shift;

print "process_connection start/n";

my $peer = gethostbyaddr($s->peeraddr,AF_INET || $s->peerhost);

my $port = $s->peerport;

warn "connection from [$host,$port]/n";

while(<$s>){

chomp;

print $_,"/n";

}

$s->close;

print "process_connection end/n";

}