PHP sockets langzaam
Code die ik gebruik:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
echo "begin!<br>";
flush();
$address = gethostbyname('www.xwis.net');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
flush();
echo "verbinden naar $address" . ":" . "$service_port...<br>";
if (socket_connect($socket, $address, 80) < 0) {
echo "socket_connect() failed.\nReason: ($result) ";
}
else {
echo "socket gemaakt";
}
flush();
$in = "GET /xcl/?pid=51627 HTTP/1.1\r\n";
$in .= "Host: xwis.net\r\n\r\n";
$out = '';
echo "Sending HTTP GET request:" . $in . "...<br>";
socket_write($socket, $in);
flush();
echo "antwoord lezen:\n\n<xmp>";
flush();
while ($out = socket_read($socket,1024)) {
echo $out;
flush();
}
echo "</xmp> klaar, socket sluiten.\n\n";
socket_close($socket);
exit();
?>
echo "begin!<br>";
flush();
$address = gethostbyname('www.xwis.net');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
flush();
echo "verbinden naar $address" . ":" . "$service_port...<br>";
if (socket_connect($socket, $address, 80) < 0) {
echo "socket_connect() failed.\nReason: ($result) ";
}
else {
echo "socket gemaakt";
}
flush();
$in = "GET /xcl/?pid=51627 HTTP/1.1\r\n";
$in .= "Host: xwis.net\r\n\r\n";
$out = '';
echo "Sending HTTP GET request:" . $in . "...<br>";
socket_write($socket, $in);
flush();
echo "antwoord lezen:\n\n<xmp>";
flush();
while ($out = socket_read($socket,1024)) {
echo $out;
flush();
}
echo "</xmp> klaar, socket sluiten.\n\n";
socket_close($socket);
exit();
?>
Zodra alle data al is gelezen duurt het dus nog een tijdje voordat "klaar, socket sluiten. " op het scherm verschijnt. Is daar een verklaring voor? Het werkt wel... alleen zeer langzaam helaas.
Ohja, open de site in IE omdat firefox pas de buffer uitleest zodra het de xmp sluittag heeft gevonden. Die komt dus juist te laat ;P
zzattack:
In Firefox is je socket anders sneller dan in IE ;-)Ohja, open de site in IE omdat firefox pas de buffer uitleest zodra het de xmp sluittag heeft gevonden. Die komt dus juist te laat ;P
uhm ik dacht dat ik de noob was ;P
http://84.31.72.237
http://84.31.72.237/index.phps
bump again
Hierbij is de regel met de top, regel 55, de }, het einde van de while-lus.
Ik heb je script even herschreven en het uitlezen binnen de lus gezet, in plaats van in de voorwaarde:
Inderdaad, regel 51 is de socket_read().
Dus ik dacht dat het aan socket_read lag, dat die gewoon heel sloom was. Echter, waneer ik hem vergelijk met een ander script van mijzelf, dat hetzelfde doet alleen dan via fsockopen viel me op dat ik 1 header meer meestuur, namelijk 'Connection: close'.
En stop ik die header ook in jouw script, doet hij het gewoon instant, zoals het hoort. socket_read() bleef dus tijd innemen, wachten totdat er nog wat kwam. De connection was immer niet dicht.
Oplossing:
Nette uitleg Jelmer :)