Write haof XML files: Satyam (
satyam@satyam.com.ar)
Fecha: vie 13 may 2005 - 18:52:15 CEST
En primer lugar, puede que te interese ver el apéndice
L del manual,
respecto de los URL que puedes especificar al usar la
función fopen(),
especialmente:
http://www.php.net/manual/en/wrappers.http.php
Esto sólo te permite hacer un GET, no un POST, espero
que eso te sirva
igual.
Veo que no esperas respuesta al POST que haces, sino que
cierras la conexión
inmediatamente, descartando cualquier respuesta, sin embargo,
por esas
cuestiones de los tiempos y las demoras, puede que al hacer
el fclose
inmediatamente despues del fputs, al servidor le llegue la
información de la
caida de la conexion antes de haber procesado el dato y el
POST puede que
sea desechado. Deberías hacer el fgets, aunque
más no fuera para asegurarte
que la comunicacion se ha establecido en ambos sentidos. El
fopen te lo
resuelve mejor pues al enviar la información del URL,
con los datos del GET,
abre inmediatamente un buffer para recibir la posible
respuesta.
Además, el fopen te permite manejar proxies.
Me imagino que tu consulta es como puedes enviar uno de estos
pedidos cada
segundo. La respuesta es, basicamente, no puedes. El
fsockopen y luego el
fputs pueden tardar tiempos muy variables, nunca sabes
cúanto. Lo mismo
ocurrirá con in fopen. En definitiva, no es diferente
de lo que ocurre
cuando tipeas un URL en tu navegador. Podrían quedarse
varios segundos
colgados hasta salir con timeout. El timeout lo puedes
controlar, pero si lo
haces muy corto, eso haria que muchas peticiones que
simplemente se estan
demorando terminen canceladas.
El unico lugar donde ponerle el sleep sería en el lazo
for(), pero esa
demora simplemente se sumaría a la demora de la
transmision, nunca lograrías
una demora de 1 segundo entre peticion y peticion sino de 1
segundo mas lo
que hubiera tardado la peticion anterior, que pueden ser
varios segundos.
Si quieres hacer una consulta cada segundo, entonces
deberás recurrir a
algun entorno multitareas, que el PHP no lo es. Java es una
buena opcion
para esto. El problema que tienes aca es el fsockopen y el
fputs que pueden
demorar tiempos arbitrarios, mayores que el segundo que tu
buscas. Con un
entorno multitareas puedes tener un lazo principal generando
'threads' a
razón de uno por segundo, cada uno de ellos haciendo
un pedido y cerrándose
por si solos cuando lo hubieran hecho. Deberas poner un
limite a la
cantidad de 'threads' que lanzas, pues si hubiera muchos
abiertos, eso
indicaría que el servidor no esta respondiendo y si no
le pusieras limite
llegarías a consumirte toda la memoria de tu
máquina.
Tener varias operaciones pendientes enter maquinas no es
problema, de hecho,
cuando un navegador carga una pagina, en la medida que va
leyendo el
documento y reconociendo referencias a otros URL, por
ejemplo, hojas de
estilo o imágenes, genera multiples conexiones que
conviven hasta haber
cargado todo el documento.
Respecto del 'tick', no tiene una medida fija. Es el tiempo
que tarda en
ejecutarse una instrucción, que puede variar muchisimo
segun la instrucción
y la velocidad y carga de la máquina. Pero es lo
más cercano que tienes a
multitareas en PHP. De todas maneras, tu problema reside en
la demora
indeterminada del fsockopen, que no hay forma de arreglar.
Satyam
"Gerardo Aquino" <
mogurbon2000@yahoo.com.mx> wrote in message
news:20050512233617.92190.qmail@web60314.mail.yahoo.com...
> Si mira hago esto:
>
$numero=$_REQUEST['numero'];
> function
>
smspb($url,$server,$puerto,$trigger,$mensaje){
>
$chrdata="dato1=eldato&dato2=elostrodato";
> $s_Request = "POST " . $url . "
HTTP/1.0\n";
> $s_Request .= "Host: " . $server .
":" .
> $puerto . "\n";
> $s_Request .=
"Content-Type:
>
application/x-www-form-urlencoded\n";
> $s_Request .= "Content-Length: "
.
> strlen($chrdata) . "\n";
> $s_Request .= "\n" . $chrdata
.
> "\n\n";
> $fp = fsockopen ($server,
$puerto,
> $errno, $errstr, 30) or die(
"Error" );
> fputs ($fp, $s_Request);
> fclose($fp);
>
> }
>
>
>
>
for($i=1;$i<=$numero;$i++){
>
> smspb($url, $server, $puerto,
$trigger,"mesage".$i);
>
> }
>
> ahora lo que no entiendo
es:
>
¿register_tick_function
> declare ()
> hacen que la funcion se ejecute en
un solo tick?, y si
> es asi ¿cuanto dura el
tick?
> no se si me pudieran dar un
ejemplo,
> de antemano gracias
>
>
> --- Satyam <
satyam@satyam.com.ar> escribió:
>
>> Ok, ahora nos vamos
entendiendo. En algun lugar por
>> ahi dices 'se va la
>> primera URL'. Que usas? Fopen?
Si lo que quieres
>> es consultar
regularmente
>> un URL a intervalos exactos de
1 segundo, te va a
>> ser muy dificil
hacerlo
>> con PHP. El fopen se
demorará hasta establecer la
>> conexion, lo cual
puede
>> tardar una buena parte de un
segundo, a eso se le
>> sumará el segundo de
la
>> demora del sleep y esto sin
siquiera haber leido
>> algo. Tendrías que
estar
>> generando y manteniendo
múltiples identificadores de
>> recursos para cada
>> lectura pendiente, de las
cuales podrías llegar a
>> tener muchas andando a
un
>> tiempo. Lamentablemente en
PHP, no siendo
>> multitareas, es muy dificil
que
>> puedas lograrlo. Lo mas
aproximado a algo
>> multitareas lo puedes lograr
con
>> register_tick_function y el
declare 'tick', y si la
>> temporización es
algo
>> vital, pues deberas buscar
otro entorno de
>> ejecucion, pues PHP no
te
>> servirá.
>>
>> Satyam
>>
>>
>> "Gerardo Aquino"
<
mogurbon2000@yahoo.com.mx> wrote
>> in message
>>
>
news:20050510215318.19550.qmail@web60325.mail.yahoo.com...
>> > disculpen son posts a
otro server
>> > digamos:
>> > http://php.net?parametro1=algo¶metro2=otracosa
>> > y necesito generar
varios
>> > con un retardo de un
segundo por url
>> > gracias de
antemano
>> >
>> > --- Satyam
<
satyam@satyam.com.ar> escribió:
>> >> Lo que queremos saber
es qué quieres hacer con
>> esos
>> >> URL. No se
cuántos
>> >> miles de URL
podrías generar por segundo y
>> tambien
>> >> puedes demorar
la
>> >> generacion de URLs a
gusto, pero luego, que vas a
>> >> hacer con
ellos?
>> >>
>> >> Si esperas
enviarselos a un navegador, olvidalo.
>> >> Una vez que a un
navegador
>> >> le has enviado un
documento, no hay forma que le
>> >> envíes otro,
ni que tengas
>> >> ningún control
de ningún tipo sobre lo que hace
>> el
>> >> navegador. Cuando
un
>> >> navegador
recibió lo que pidió a través de
un
>> URL,
>> >> es como si no
existiera
>> >> mas.
>> >>
>> >> Es el navegador al
que le tienes que decir, 'al
>> cabo
>> >> de tanto
tiempo,
>> >> consultame de nuevo'.
Es el navegador el que
>> debe
>> >> iniciar la
comunicacion,
>> >> el servidor, donde
corre PHP, no puede hacer
>> nada,
>> >> por mucho que
quiera.
>> >> Por eso, el problema,
si es que es este, que no
>> lo
>> >> sabemos, es un
problema
>> >> de JavaScript y
DHTML, no de PHP.
>> >>
>> >> Satyam
>> >>
>> >>
>> >> "Gerardo Aquino"
<
mogurbon2000@yahoo.com.mx>
>> wrote
>> >> in message
>> >>
>> >
>>
>
news:20050510165400.25509.qmail@web60322.mail.yahoo.com...
>> >> > la cosa es que
necesito generar urls con
>> distintos
>> >> > parametros cada
segundo y para detenerlo aunke
>> use
>> >> > sleep se va a la
primera url y ya no aclanza a
>> >> > utilizar la
segunda tercera o cuarta, alguna
>> >> >
sugerencia?
>> >> >
>> >> > --- Victor
Saldaña D. <
vsaldana@gmail.com>
>> >>
escribió:
>> >> >> On 5/9/05,
Gerardo Aquino
>> >> >>
<
mogurbon2000@yahoo.com.mx> wrote:
>> >> >> > Saludos
a todos los de la lista
>> >> >> >
disculpen, hay forma de cada determinado
>> tiempo
>> >> >>
mandar
>> >> >> > generar
un url, digamos 1 seg un url 2 seg
>> otro
>> >> >>
url,
>> >> >> >
etc..
>> >> >> > de
antemano gracias
>> >> >>
>> >> >> hay
multiples formas pero depende de que es lo
>> >> que
>> >> >> quieras
hacer (y
>> >> >> como lo
quieras abordar).
>> >> >>
>> >> >> para detener
la ejecucion de PHP X segundos se
>> >> usa
>> >> >> sleep
www.php.net/sleep
>> >> >>
>> >> >> --
>> >> >> Victor
Saldaña D.
>> >> >> User #330054
counter.li.org
>> >> >>
>> >> >> --
>> >> >> PHP Spanish
Localization Talk Mailing List
>> >> >> (http://www.php.net/)
>> >> >> To
unsubscribe, visit:
>> >> http://www.php.net/unsub.php
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >>
>> >
>>
>
_________________________________________________________
>> >> > Do You
Yahoo!?
>> >> > La mejor
conexión a internet y 25MB extra a tu
>> >> correo por $100 al
mes.
>> >> > http://net.yahoo.com.mx
>> >>
>> >> --
>> >> PHP Spanish
Localization Talk Mailing List
>> >> (http://www.php.net/)
>> >> To unsubscribe,
visit:
>> http://www.php.net/unsub.php
>> >>
>> >>
>> >
>> >
>>
>
_________________________________________________________
>> > Do You Yahoo!?
>> > La mejor conexión
a internet y 25MB extra a tu
>> correo por $100 al
mes.
>> > http://net.yahoo.com.mx
>>
>> --
>> PHP Spanish Localization Talk
Mailing List
>> (http://www.php.net/)
>> To unsubscribe, visit:
http://www.php.net/unsub.php
>>
>>
>
>
>
_________________________________________________________
> Do You Yahoo!?
> La mejor conexión a
internet y 25MB extra a tu correo por $100 al mes.
> http://net.yahoo.com.mx
-- PHP Spanish Localization Talk Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Este archivo fue generado por hypermail 2.1.7 : sáb 18 mar 2006 - 18:24:01 CET