Foros del Web » Programación para mayores de 30 ;) » Programación General »

[Mini-Tutorial] Qué hacer en caso de encontrar algún fallo en nuestros programas

Estas en el tema de [Mini-Tutorial] Qué hacer en caso de encontrar algún fallo en nuestros programas en el foro de Programación General en Foros del Web. Bueno, primero que todo, voy a explicarles qué voy a hacer en este post: El siguiente es un documento en el cual hago una demostración ...
  #1 (permalink)  
Antiguo 15/07/2009, 07:15
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Información [Mini-Tutorial] Qué hacer en caso de encontrar algún fallo en nuestros programas

Bueno, primero que todo, voy a explicarles qué voy a hacer en este post:
El siguiente es un documento en el cual hago una demostración de lo que sería el razonamiento a seguir (lo sigo yo y me ha funcionado) en el momento en que se presente algún problema en nuestros programas. está basado en un ejemplo real y lo escribo para que las personas iniciadas tengan una noción básica de que hacer en caso de problemas... Espero que les guste y que no sea muy pesado:

antes que nada les voy a explicar cómo me surgió el problema.
Posteriormente, qué método de razonamiento seguí para buscar una solución.
y por último cuál fue la solución.

El Problema:

Estaba intentando crear un Browser compacto y básico, pero al hacer los HttpRequest me daba cuenta de que el HttpResponse no llegaba completo, incluso, había ocasiones en que en un mismo tiempo de ejecución, podrían llegar diferente cantidad de datos, desde el mismo host.

Lo que hice para buscar solución fue primero ver cómo funcionaba la función recv() y comprobar que todo estuviera hipotéticamente correcto. al ver que el problema no estaba en el recv(), me encaminé a investigar el protocolo HTTP, pues vino a mi cabeza que probablemente haya que enviar una confirmación de la cantidad de datos que recibía, deduje que este no era el problema que tenía, puesto que no encontré nada concluyente. en el protocolo http solo hay un HttpRequest que se envía al server, y un HttpResponse que se recibe desde el server, no hay procesos intermedios. Con lo cual el problema es que mi programa no recibía todos los datos. Este procedimiento es el que se conoce como "Documentarse", uno de los procesos más importantes en el camino del aprendizaje para ser un buen informático.

No contento con lo que obtuve de la documentación, pensé en el funcionamiento de un Browser el cual tiene historia, o sea, que tiene tiempo desde su creación (Experiencia). a veces, el browser como el FireFox, se queda en modo de espera antes de mostrar todos los datos, "que no están en la caché", deduje pues que probablemente era porque no se había completado el proceso de recepción de datos. volví al protocolo HTTP y vi que en las páginas cuya cabecera no contenía el Content-Length el servidor se encargaba de ir enviando en Hexadecimal, la cantidad de datos "En Bloques desiguales" hasta que concluía el envío de datos con un "0". Con lo cual siempre se tenía conocimiento de la cantidad de datos recibidos y si estaban completos o no. Este era el verdadero problema, saber hasta cuando usar la función recv().

La solución:

son muchas las soluciones posibles: una es comprobar mediante el HTTP si los datos recibidos son los esperados. Bien por medio de Content-Length o ir procesando los hexadecimales que el server enviaba.

Mi solución, puesto que la primera es más complicada, y gasta más recursos, fue simplemente hacer un bucle que ejecutara el recv() hasta que la cantidad recivida fuera 0, y cuando fuera 0, entrara en otro bucle que, por medio de la función difftime() comprobara que habían pasado dos segundos, es decir, un tiempo de espera, y que por cada tiempo de espera aumentara en uno una variable "intentos" que no podría ser mayor de 5, así hasta que se llenaran los 5 intentos de recibir datos, o lo que es lo mismo, si un server tarda más de 10 segundos (2 segundos X 5 intentos) en responder, ya no se recibieran datos.

Así pues, al ejecutar el programa, en una situación ideal "que el server no tarde más de 10 segundos en responder", recibía todos los datos.

Pero esta no es la solución más profesional. Una verdadera solución sería implementar las posibles soluciones, antes postuladas, en el mismo programa, así y solo así se estaría 100% seguro de si se reciben o no todos los datos.

queda pues la solución de la siguiente manera:

hacer el HttpRequest.
recibir los header, que van separados del resto de la info por la primera línea en blanco de todo el HttpResponse, y procesar la cantidad de datos a recibir, bien por el Content-Length que está en el header, o bien ir comprobando los hexadecimales. así pues internamente introducir intervalos máximos de tiempo a la espera de recibir toda la información.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #2 (permalink)  
Antiguo 15/07/2009, 07:25
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: [Mini-Tutorial] Qué hacer en caso de encontrar algún fallo en nuestros pro

Glosario:

En caso de que alguien no entienda alguna palabra, que postee cuál es y yo iré haciendo el glosario

HttpRequest: Información que se envía a un servidor de páginas web en la cual se hace una petición de datos y se envía todo lo referente con el cliente: cookies, navegador, etc...; siguiendo el protocolo HTTP.

HttpResponse: Es la respuesta del servidor la cual se divide en dos partes: la cabecera, con información del servidor y de cómo tratar la info recibida, y el cuerpo donde está el código HTML(Lo más frecuente) y sus complementarios: JavaScript, CSS. Se ha de tener en cuenta que según las cabeceras, el cuerpo podría tener una imágen, un texto, un programa, etc... depende del Content-Type cómo se trate la información del cuerpo.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:55.