Hallo,
So schaffe ich mit PHP nichtmal 10 Requests pro Sekunde.
Kein Wunder :)
Aber kann ich nicht einfach fsockopen aus dere Schleife Auslagern
und die Socket auslagern?
Nicht so richtig. Aber du kannst was anderes machen (Perl, weil man
in PHP nicht forken kann):
use LWP::Simple;
sub waiter {
wait;
$SIG{CHLD} = &waiter; # for SysV
}
sub make_conn() {
get('http://wwwtech.de/');
}
$SIG{CHLD} = &waiter;
for(1..1000) {
my $pid = fork();
if(defined $pid) {
if(!$pid) {
make_conn();
exit(0);
}
}
else {
die("Could not fork!");
}
}
Kann man das den noch irgendwie beschleunigen,
Ja: mehrere Verbindungen gleichzeitig, nicht nacheinander machen :)
oder ist PERl da deutlich schneller?
Das hat nix mit Perl oder PHP zu tun -- das liegt am Protokoll.
Warum, dauer das absenden so lange?
Nicht das Absenden dauert lange, sondern das Aufbauen der Verbindung
dauert lange. Bei TCP/IP muessen 3 Pakete geschickt werden, um eine
Conn aufzubauen (der 3-Wege-Handshake):
You Host
--> SYN --> Listens
Waiting for ACK <-- ACK <-- Waits for ACK
Established --> ACK --> Established
Dasselbe gilt fuer den Abbau einer Verbindung:
You Host
--> FIN --> Established
Waits for ACK <-- ACK <-- Waits for ACK
Closed --> ACK --> Closed
Was zum Lesen dazu:
http://sparky.freesoft.org/CIE/Course/Section4/10.htm
Dazu kommt, dass die Pakete eventuell ueber n Rechner gehen muessen.
Du kannst das Netzwerk-Segment, in dem der Rechner steht,
im Normalfall nicht direkt erreichen, sondern musst ueber sog.
'Router' gehen. Herausfinden, wieviele Router du besuchst, kannst
du mit 'traceroute'.
Gruesse,
CK