А че так медлееено работают сокеты в Perl под win32 (ActivePerl)? server <=> localhost <=> client Red Hat ES 3 (2.4.21-20.EL), P3 500: 19,6 Mb/sec Windows XP, Celeron 900: 5,1 Mb/sec Почти в 7 раз уделал, что так плохо то? Давайте свои цифры, код тестов ниже: #srv.pl #!/usr/bin/perl -w use Socket; use Time::HiRes qw(gettimeofday tv_interval); use strict; unless(defined $ARGV[0]) { print "Usage: ./srv.pl port\n"; exit; } my $port = $ARGV[0]; my $protocol = getprotobyname('tcp'); socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "socket() failed: $!\n"; setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, 1) or die "Can't set SO_REUSADDR: $!\n" ; my $my_addr = sockaddr_in($port, INADDR_ANY); bind(SOCK, $my_addr) or die "bind() failed: $!\n"; listen(SOCK, SOMAXCONN) or die "listen() failed: $!\n"; print "Waiting for incoming connections on port $port...\n"; while (1) { next unless my $remote_addr = accept(SESSION,SOCK); my ($port, $hisaddr) = sockaddr_in($remote_addr); print "Connection from [",inet_ntoa($hisaddr),",$port]\n"; my $t0 = [gettimeofday]; my $bytes = 0; my $msg = ''; for(my $i=0; $i < 30000; $i++) { $msg = "$i"x1000; print SESSION "$msg\n"; $bytes += length($msg); print $i,"\n" if($i && $i % 2000 == 0); } print "Connection from [",inet_ntoa($hisaddr),",$port] finished\n"; close SESSION; my $t1 = [gettimeofday]; my $elapsed = tv_interval $t0, $t1; print "bytes: $bytes, time: $elapsed, Speed: ".sprintf("%.3f", $elapsed ? $bytes/$elapsed : 0)."\n"; } close SOCK; exit; #cli.pl #!/usr/bin/perl -w use Socket; use Time::HiRes qw(usleep ualarm gettimeofday tv_interval); use strict; unless(defined $ARGV[0]) { print "Usage: ./cli.pl port\n"; exit; } my $protocol = getprotobyname('tcp'); my $port = $ARGV[0] or die "invalid port!\n"; my $host = inet_aton("localhost") or die "unknown host!\n"; socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "socket() failed: $!\n"; my $dest_addr = sockaddr_in($port, $host); connect(SOCK, $dest_addr) or die "connect() failed: $!\n"; my $t0 = [gettimeofday]; my $i = 0; my $bytes = 0; while(<SOCK>) { $i++; print $i,"\n" if($i && $i % 2000 == 0); chomp; $bytes += length($_); } close SOCK; my $t1 = [gettimeofday]; my $elapsed = tv_interval $t0, $t1; print "bytes: $bytes [$i], time: $elapsed, Speed: ".sprintf("%.3f", $elapsed ? $bytes/$elapsed : 0)."\n";
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум troubles with perl & tcp sockets (2006)
- Форум Perl: проблема совместимости «use Socket;» (2004)
- Форум Сканер портов (2000)
- Форум [C] Получить данные на TCP сокет (2008)
- Форум Perl. Сокеты. (2007)
- Форум клиент и сервер на Перл (2009)
- Форум Работа с сокетами в C (2010)
- Форум Задание на Stepik по Perl. Никак не могу понять, где загвоздка. HELP. (2020)
- Форум Perl + FastCGI + nginx (2009)
- Форум libssh2 и LIBSSH2_ERROR_SOCKET_SEND (2019)