gpt4 book ai didi

multithreading - Perl TCP 服务器处理多个客户端连接

转载 作者:可可西里 更新时间:2023-11-01 02:33:43 26 4
gpt4 key购买 nike

首先我会说我对 Perl 和 Socket 编程的经验很少,所以我很感激我能得到的任何帮助。我有一个 TCP 服务器,它需要同时处理多个客户端连接,并且能够随时从任何一个客户端接收数据,并且还能够根据收到的信息将数据发送回客户端。例如,Client1 和 Client2 连接到我的服务器。 Client2 发送“Ready”,服务器对其进行解释并向 Client1 发送“Go”。以下是我目前所写的内容:

my $sock = new IO::Socket::INET 
{
LocalHost => $host, // defined earlier in code
LocalPort => $port, // defined earlier in code
Proto => 'tcp',
Listen => SOMAXCONN,
Reuse => 1,
};
die "Could not create socket $!\n" unless $sock;

while ( my ($new_sock,$c_addr) = $sock->accept() ) {
my ($client_port, $c_ip) = sockaddr_in($c_addr);
my $client_ipnum = inet_ntoa($c_ip);
my $client_host = "";

my @threads;

print "got a connection from $client_host", "[$client_ipnum]\n";
my $command;
my $data;

while ($data = <$new_sock>) {
push @threads, async \&Execute, $data;
}
}

sub Execute {
my ($command) = @_;

// if($command) = "test"
// send "go" to socket1

print "Executing command: $command\n";
system($command);
}

我知道我的两个 while 循环都会阻塞,我需要一种方法将我的 accept 命令实现为一个线程,但我不确定编写它的正确方法。

最佳答案

fork、thread 或使用 select 进行 I/O 多路复用。看看Net::ServerAnyEvent::Socket , 也。有关 I/O 多路复用的示例,请查看 How can I accept multiple TCP connections in Perl? .

关于multithreading - Perl TCP 服务器处理多个客户端连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4856964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com