所以我主持了一个网站,目的是对它进行安全测试,所以我在perl中创建了一个脚本,可以生成高达60-72 Mbps(信息)的发送。我注意到如果我同时多次运行脚本,我将产生高达150 Mbps的速度。
如何能够在不需要多次运行脚本的情况下实现150 Mbps的速度?
谢谢!
答案 0 :(得分:2)
您想要打开多个TCP连接。
您需要使用一个事件循环来处理保持所有管道已满的来回,或者需要使用线程/进程。如上所述,您可以使用' fork'要制作脚本的多个副本,每个副本可以建立一个TCP连接并轻松保持连接完整。这可能是一个简单的解决方案。
如果你想把你的程序保持为一个单一的过程,那么它可以做多一点工作,但仍然可以。
如果您要打开很多连接,请阅读以下内容:http://www.kegel.com/c10k.html
您可能还会考虑使用更快的语言,如C或Go,因为使用perl确实会涉及一些开销。 (我先做一个测试,也许开销可以忽略不计。通过使用像curl
这样的工具测试来发送一个大文件来查看它是否比你的perl程序获得更高的带宽。)
答案 1 :(得分:0)
正如评论所说,fork()会这样做。
您当前的剧本:
#!/usr/bin/perl
generate_some_load();
添加fork:
#!/usr/bin/perl
fork(); # now there are two processes running
generate_some_load();
或者如果你想开始一堆
#!/usr/bin/perl
my $num_to_start = 10;
while($num_to_start-- > 0 && fork() != 0) {
}
generate_some_load();
答案 2 :(得分:0)
我看到你希望每个窗口都能达到更高的Mbps,我可能会在“前台”中运行脚本并需要打开一个新窗口来启动其他窗口。您可能想要做的一件事是在后台启动脚本。
而不是
% your_script.pl
如果你和&你不必开始更多的窗户:
% your_script.pl &
% your_script.pl &
% your_script.pl &
...
有时您需要对/ dev / null进行一些重定向,如下所示:
% your_script.pl > /dev/null 2>&1 &