[php] Timeout inbouwen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Momenteel heb ik een script (met socket-connecties) dat wordt uitgevoerd, maar soms erg lang duurt. Ik zou na 10 seconden het script willen stoppen en een boodschap tonen, die door een stuk code wordt aangemaakt.
Hierbij dacht ik aan:
PHP:
1
set_time_limit(10);


Probleem:
Socket-handelingen tellen niet mee voor deze functie, dus als een socket hangt, dan gaan we over die 10 seconden...

Hiervoor heb ik de search en php-manual gebruikt, maar nergens een werkende oplossing: de timeout functie die je op sockets kan plaatsen werkt ook voor geen moer (gaat ie steeds over)...

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

woeitje: waarom snap ik de relevantie van je reply niet helemaal? :?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Tuvow
  • Registratie: Juli 2002
  • Laatst online: 15-09 16:01
Hij bedoelt ermee dat je een aparte timelimit voor sockets kan maken dmv 1 van die 2 functies ;)

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Jaaaa, en TS heeft toch duidelijk vermeld dat die niet goed of precies genoeg werkt? :?
de timeout functie die je op sockets kan plaatsen werkt ook voor geen moer (gaat ie steeds over)...

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
maartenba schreef op 25 August 2003 @ 15:46:
Probleem:
Socket-handelingen tellen niet mee voor deze functie, dus als een socket hangt, dan gaan we over die 10 seconden...
Ze tellen wel mee, maar de timer wordt alleen op bepaalde momenten gecontroleerd (tussen staments door, in ieder geval; misschien wat vaker, maar blijkbaar niet gedurende een interne function call).
de timeout functie die je op sockets kan plaatsen werkt ook voor geen moer (gaat ie steeds over)...
Die zou wel moeten werken, maar die timeout geldt per operatie. Als je 'm dus op 10 seconden zet en je begint een call op 9 seconden, dan zit duurt je script in totaal nog steeds 19 seconden. In principe zou je 'm dus beter op iets als 2 seconde kunnen zetten; in veel gevallen is dat gewoon meer dan genoeg. Met een tijdslimiet van 10 seconden zou je dan altijd onder de effectief 12 seconden uit moeten komen.

Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Heb het geprobeerd op 1 seconde, en draait lekker door, dus geen timeout te bespeuren...
Volgens de search en PHP manual dacht ik dat dit enkel op sockets werkt die met fopen geopend worden ?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
maartenba schreef op 25 August 2003 @ 22:52:
Heb het geprobeerd op 1 seconde, en draait lekker door, dus geen timeout te bespeuren... Volgens de search en PHP manual dacht ik dat dit enkel op sockets werkt die met fopen geopend worden ?
Hmm, dat heb ik nog niet eerder gehoord, maar het zou kunnen. Hoe kom jij er aan, dan?

Acties:
  • 0 Henk 'm!

Verwijderd

curry684 schreef op 25 August 2003 @ 16:28:
Jaaaa, en TS heeft toch duidelijk vermeld dat die niet goed of precies genoeg werkt? :?

[...]
als ik me niet vergis had hij het hier wel over de set_time_limit(); functie en niet over de stream_set_timeout(); functie.

daarnaast nog opmerkingen over de functies:
set_time_limit:
When called, set_time_limit() restarts the timeout counter from zero. In other words, if the timeout is the default 30 seconds, and 25 seconds into script execution a call such as set_time_limit(20) is made, the script will run for a total of 45 seconds before timing out.
fsockopen:
Note: If you need to set a timeout for reading/writing data over the socket, use stream_set_timeout(), as the timeout parameter to fsockopen() only applies while connecting the socket.
heb je daar allemaal rekening mee gehouden en getest?

anders misschien handig als ie aangeeft wat hij precies doet enzo :)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

De set_time_limit lijkt zelfs alleen maar "cpu-seconden" te tellen, ga maar es in een while loop een hoop records ophalen van je database, dan is de kans groot dat ie ver na de 10 seconden nog steeds draait, ondanks dat ie wel vaak de kans heeft de boel te controleren...
Note: The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), the sleep() function, database queries, etc. is not included when determining the maximum time that the script has been running.
En deze note lijkt dat te ondersteunen.

Acties:
  • 0 Henk 'm!

Verwijderd

ACM schreef op 26 augustus 2003 @ 11:00:
De set_time_limit lijkt zelfs alleen maar "cpu-seconden" te tellen, ga maar es in een while loop een hoop records ophalen van je database, dan is de kans groot dat ie ver na de 10 seconden nog steeds draait, ondanks dat ie wel vaak de kans heeft de boel te controleren...

[...]

En deze note lijkt dat te ondersteunen.
jep, daarom kwam ik met die socket_timeout meuk op de proppen...
ik werd alleen niet begrepen denk ik? :'(

Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Jawel hoor, en die is ook getest...

Kzal er wel uit komen na wat gefrunnik, en dan laat ik hier wel weer iets weten...
Pagina: 1