Hi!
So schaffe ich mit PHP nichtmal 10 Requests pro Sekunde.
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):
Also in PHP müßte ich jedesmal mit fsockopen eine Verbindung aufbauan, und die auch wieder schließen, richtig?
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!");
}
}
d.h. Du baust 1000 Parallele Verbindungen auf?
Kann man das den noch irgendwie beschleunigen,
Ja: mehrere Verbindungen gleichzeitig, nicht nacheinander machen :)
In PHP geht das nicht, oder? höchtens durch 10 Scripte ich die parallel starte, oder?
oder ist PERl da deutlich schneller?
Das hat nix mit Perl oder PHP zu tun -- das liegt am Protokoll.
ja, aber wenn PHP nicht parallel in einem Script mehrere Verbindungen öffnen kann hat hat es ja sehr wohl was mit PHP/PERl zu tun, oder?
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:
Also die ganze Komunikation findet dann jedesmal in 1/10 Sekunde statt? Über die Entfernung? Ich dachte man schickt nur einfach den Request ab und kümmert sich nicht um den Rest, im prinzip ist es für einen derartiegen Test ja nicht wichtig ob die bestätigung kommt, das sihet man ja dann auf dem Server, daher meien Idee fsockopen auszulagern
Grüße
Andreas