[PHP] fsockopen erg traag zonder feof

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Topicstarter
Beste Allemaal,

Ik heb weer zo'n hoofdbrekertje met PHP.
Ik gebruik fsock om een xml bestand te posten naar een andere server (SAP Business Connector)
en ik krijg dan een nette reply in de vorm van XML.

Helaas duurt het +/- 15 Seconden voordat hij klaar is..??
Nu heb ik natuurlijk al wat ge PHP.netted en gegoogled en het volgende kwam daaruit.

Normaal gebruik ik zoiets
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$socket  = fsockopen( $ip, $port, $errno, $errstr, $timeout );

//Put request header
fputs( $socket, $request );

while(!feof($socket))
{

    //Get Bytes Left
    $bytes_left = socket_get_status($socket);

    if($bytes_left["unread_bytes"]!=0)
    {
         $data .= fread($socket,$bytes_left["unread_bytes"]);
    }
                else
                {
                     break; break; break;
                }
}


nu is dus het probleem dat hij dus een feof krijgt na +/- 15 sec.
Nu weet ik wel hoe groot de xml is die ongeveer terug komt...allleen een melding en een code.
Maar toch weet iemand hoe je dit moet oplossen / aanpakken

O-)

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
die feof komt zodra de file / socket is gesloten. (Een Connection: close kan misschien wel helpen, meesturen met de request).

En anders zien of je een Content-Length header meekrijgt.

(overigens, werkt dit wel met het http-protocol, dacht het wel gezien die timeout).

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

break; break; break; is natuurlijk ook nutteloos; als dat echt is wat je wil moet je een break 3; geven.

Kan je niet met timers bepalen waar nu echt de bottleneck zit?

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • yiko
  • Registratie: September 2003
  • Laatst online: 20-04 20:19
Met stream_set_timeout kan je de timeout van je socket operaties gaan instellen. En $bytes_left["timed_out"] controleren heeft mij ook al aantal keer geholpen.
Voor de rest kan het zeker geen kwaad om eens de verschillende socket functie calls te profilen.

Acties:
  • 0 Henk 'm!

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Topicstarter
Redelijk nutteloos die breaks ja..maar die stonden er nog...ik heb inderdaad geprobeerd om met een timer even te kijken waar het misgaat.

Als ik de xml doc terug krijg is deze eigenlijk al helemaal binnen en geeft bytes returned 0 terug...
Toch moet ik dan op de laatste tick nog een sec of 10 wachten..

Het blijft vreemd want ik heb het dus alleen vanaf die webserver

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Meestal ligt dit aan de gebruikte PHP versie.

Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online

DPLuS

 

[hier had ik iets geschreven wat niets met het probleem te maken kon hebben]

[ Voor 64% gewijzigd door DPLuS op 12-07-2005 23:16 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Zet de stream op non-blocking, waardoor je fread functie blijft wachten tot het aantal gevraagde karakters is gelezen, in plaats van te wachten tot deze beschikbaar zijn; http://nl3.php.net/manual...n.stream-set-blocking.php

[ Voor 6% gewijzigd door frickY op 13-07-2005 13:12 ]

Pagina: 1