PHP sockets langzaam

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Zzattack

zzattack

19/06/2006 15:54:00
Quote Anchor link
Ik ben nieuw met php, dus misschien is het wel heel logisch, maar ik wil het toch even navragen. Als ik php sockets gebruik gaat alles vrij vlug, maar als het lezen van een buffer klaar is duurt het nog heel lang voordat de socket gesloten wordt. Voorbeeld op http://84.31.72.237

Code die ik gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
?>


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.
 
PHP hulp

PHP hulp

05/01/2025 08:20:29
 
Zzattack

zzattack

19/06/2006 16:01:00
Quote Anchor link
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
 
Winston Smith

Winston Smith

19/06/2006 16:09:00
Quote Anchor link
zzattack:
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
In Firefox is je socket anders sneller dan in IE ;-)
 
Zzattack

zzattack

19/06/2006 16:09:00
Quote Anchor link
uhm ik dacht dat ik de noob was ;P
 
Zzattack

zzattack

19/06/2006 20:51:00
Quote Anchor link
iemand enig idee?
http://84.31.72.237
http://84.31.72.237/index.phps
 
Zzattack

zzattack

20/06/2006 15:57:00
Quote Anchor link
bump again
 
Jelmer -

Jelmer -

20/06/2006 16:44:00
Quote Anchor link
Door hem even door een script dat ik onlangs had gemaakt te halen krijg ik deze 2 grafiekjes. De zwarte lijn is de tijd die hij over die regel heeft gedaan, in totaal (alle rondjes bij elkaar opgeteld) en de rode is is het aantal maal dat hij die regels heeft uitgevoerd:
Afbeelding
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:
Afbeelding
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
   $in
.= "Connection: Close\r\n";
?>
 
Winston Smith

Winston Smith

20/06/2006 17:09:00
Quote Anchor link
Nette uitleg Jelmer :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.