1

通过 Perl 处理与 cisco 设备的并行 telnet 连接的最佳方法是什么。我需要打开几个 telnet 连接以保持在后台并以交互式或定时批处理的方式提供命令。是否可以使用 anyevent 或 POE 库来做到这一点?

谢谢。

4

2 回答 2

1

线程是一个令人头疼的问题。诸如 AnyEvent 之类的事件循环更简单,性能更高,特别是如果您想以定时方式提交命令并需要处理数千个连接。

有关如何打开连接和读取和写入数据的信息,请参见 AnyEvent::Socket:http://metacpan.org/pod/AnyEvent:: Socket

您还可以在其上使用 Net::Telnet,因为支持使用已打开的文件句柄:http ://metacpan.org/pod/Net::Telnet#fhopen

如果您在使用 AnyEvent 时遇到问题,只需提出一个新问题。

于 2013-06-24T17:26:30.733 回答
0

最简单的方法是使用踏板。您可以使用“队列”来回发送命令和接收输出。

您可以简单地创建 x 个线程,然后将大量命令排队并发送它们。

如果你需要处理输出,那就有点棘手了。

http://metacpan.org/pod/Thread::队列

它也可以通过基于事件的模块来解决,但是需要一种非常不同的方法。这样,您可以创建一个非线程函数,然后轻松将其转换为线程函数。

#without processing the output
use strict;
use warnings;

use threads;
use Thread::Queue;

my $q = Thread::Queue->new();    # A new empty queue
my $maxThreads = 20;
# Create Worker threads
for (1..$maxThreads){
  my $thr = threads->create(
    sub {
        # Thread will loop until no more work
        while (defined(my $cmd = $q->dequeue())) {
            do_someting($cmd);
        }
    }
  );
}

# Send work to the threads
$q->enqueue($cmd1, ...);
# Signal that there is no more work to be sent
$q->end();
# Join up with the thread when it finishes
$thr->join();
于 2013-06-24T14:45:16.973 回答