1
我想擁有一個可以通過Net :: Server實例訪問的共享連接池。不幸的是,IPC :: Shareable不允許我存儲連接,因爲它們是代碼引用。這是代碼的精簡版:Perl:使用IPC :: Shareable來彙集Net :: Server連接
use IPC::Shareable (':lock');
use parent 'Net::Server::Fork';
use MyConnectClass;
sub login {
return MyConnectClass->new();
};
my %connection;
tie %connection, 'IPC::Shareable', 'CONN', {
'create' => 1,
'exclusive' => 0,
'mode' => 0666,
'destroy' => 'yes',
}
or croak 'Can not tie connection variable';
sub add_connection {
my $id = shift(@_);
my $con = shift(@_);
$connection{$id} = $con;
};
sub get_connection {
my $id = # .. find unused connection
return $connection{$id};
}
sub process_request {
my $self = shift(@_);
eval {
my $connection = get_connection();
my $line = <STDIN>;
# .. use $connection to fetch data for user
};
};
for (my $i=0; $i<10; $i++) {
add_connection($i, &login);
};
main->run(
'host' => '*',
'port' => 7000,
'ipv' => '*',
'max_server' => 3,
};
不幸的是,程序在第一次登錄後死亡:「不能在../../lib/Storable.pm存儲代碼的項目」。即使將$連接隱藏在匿名數組中,也會發生這種情況。我正在尋找一種替代方式來利用泳池。
我感謝您的支持
*可能是一個完全不理解的領帶。 – doncoyote