perl 套接字事件驱动编程
Posted
技术标签:
【中文标题】perl 套接字事件驱动编程【英文标题】:perl socket event driven programming 【发布时间】:2017-09-27 17:08:30 【问题描述】:我正在编写一个 perl 服务器,它使用公钥和私钥对客户端进行身份验证,最终我需要 $client_socket->recv 是事件驱动的,而不是无限循环的轮询。是否有内置代码来执行由 IO::Socket::INET 驱动的事件。
while(1)
# waiting for a new client connection
my $client_socket = $socket->accept();
# get information about a newly connected client
my $client_address = $client_socket->peerhost();
my $client_port = $client_socket->peerport();
print "connection from $client_address:$client_port\n";
# read up to 1024 characters from the connected client
my $data = "";
$client_socket->recv($data, 1024);
print "received data: $data\n";
# write response data to the connected client
$client_socket->send("some response text");
# notify client that response has been sent
shutdown($client_socket, 1);
【问题讨论】:
【参考方案1】:没有。
Perl 没有内置任何用于事件驱动编程的东西。有各种模块可以在 CPAN 上进行事件驱动开发。其中一些列在Task::Kensho::Async。
最著名的是POE 和AnyEvent。但您可能想专门查看IO::Async。
【讨论】:
我没有在此处包含示例,因为我从未真正使用过其中任何一个,现在也没有时间尝试。 所以你是否建议我应该依靠轮询数据以及如何处理新的传入连接,因为可能有我自己定义的与客户端的握手次数。这是稳健的做法吗?我不想以 nodejs 告终。 @Sagar 不,simbabque 建议您使用上述模块之一来提供事件循环。 (也就是说,perl 有内置的工具来构建事件循环,主要是select
。)
这个来自 AnyEvent 的列表比较全面:“AnyEvent - 事件循环编程的 DBI。EV, Event, Glib, Tk, UV, Perl, Event::Lib, Irssi, rxvt-unicode, IO ::Async、Qt、FLTK 和 POE 是各种受支持的事件循环/环境。”
是的,我不太同意这种描述。 AnyEvent 与 DBI 完全不同。我不会使用 AnyEvent(事实上,我会避免使用这个特定作者的所有模块)。以上是关于perl 套接字事件驱动编程的主要内容,如果未能解决你的问题,请参考以下文章