Deseaba desarrollar un pequeño sistema chat con el objeto XMLHttpRequest. El incoveniente, como lo comente en un articulo anterior, es que el cliente pide información al servidor y esto se debe realizar cada cierto tiempo (n segundos) y eso no es bueno, pues en un sistema de chat el servidor es el que debe enviar información al cliente (nuevos mensajes, quienes están conectados, etc). Así que empece a averiguar sobre Comet (alternativa a Ajax) pero no encontre algo digno de usarse, además de tener algunos pequeños incovenientes. Así que ¿que hacer?. Yo quería mi chat de todas maneras. Así que opte por trabajarlo con Ajax de todas maneras. Trabaje con el objeto XMLHttpRequest de forma distinta a como lo hemos venido haciendo en los ejemplos.
Recibiendo los datos
Al momento de consultar mensajes nuevos en la base de datos, mi objetivo fue que el servidor no trabaje mucho. Por ejemplo: Una aplicación para guardar datos del empleado. Cuando queremos guardar un nuevo registro en una tabla (MySQL), y pulsamos Grabar, mediante una función que trabaja con Ajax enviamos los valores a un archivo PHP que realiza el guardado de los datos, luego hacemos un include de un archivo consulta.php que muestra todos elementos en la base de datos. (Bueno así lo hemos venido haciendo). Pero esto no es lo recomendable, por supuesto son ejemplos didácticos que nos da una idea de la forma de trabajo con Ajax.
Sin embargo una forma correcta sería que el archivo consulta.php solo retorne el último registro agregado a la tabla. Esto tiene su ventaja: Si hacemos que consulta.php retorne 20 registros, eso implica un peso de +KB que envia el servidor; pero, si solo envia el último elemento el peso de envio en KB es menor.
Podemos obtener los últimos registros de una tabla de muchas formas. Puede ser mediante su id autoincrement o fecha, y hacer una pequeña consulta de ‘mayor a‘. Ejemplo: select * from empleado where id>$ultID ó select * from empleado where fecha>’$ultFecha’. Sencillo.
Supongamos ahora lo siguiente: Nuestra aplicación cuando inicia, por defecto aparecen los n últimos registros de la tabla, si los hay. Cuando agregamos un nuevo registro este debe aparecer en la lista, sin alterar al resto de registros mostrados. Para ello podemos hacer uso de diversos métodos que dispone JavaScript para el manejo del DOM. El objetivo es que, siguiendo con el ejemplo, el archivo consulta.php nos arroje solo el último registro de la tabla sin formato, para que mediante JavaScript y DOM le demos el formato o estilo adecuado y lo coloquemos después del resto de registros ya mostrados.
Como hemos visto la parte de consultar los datos al servidor debe ser lo menos pesado posible, osea consultar solo los ultimos registros de la tabla. Así no tendremos problemas al realizar consultas constantes, a intervalos de tiempos definidos.
Enviando lo datos
Esta parte es sencilla. Simplemente tenemos que enviar los datos al servidor mediante una función JavaScript que hace uso del objeto XMLHttpRequest, por ejemplo a un archivo PHP llamado registro.php. Si todo sale bien se realiza una consulta (como hemos visto arriba) para obtener el último registro de la tabla.
Bien, hasta aquí todo ha sido teoría. En la próxima entrega abordaremos el código con una breve explicación, ya que la mayor parte la hemos hecho acá.
hola, implemente una funcion que consulta una tabla en postgres basado en el ejemplo del chat, pero el porcesador esta muy cargado debido a que cada vez que se llama la funcion se abre una conexion con la base de datos, como puedo hacer para abrir la conexxion a la base de datos una sola vez? y no todas las veces que se actualiza…
gracias
Se puede lograr con conexiones persistentes a base de datos con PHP, este tipo de conexiones toma una conexion abierta recientemente y la usa, en este caso del chat es importante ya que cada cierto tiempo y constante se conecta a la base de datos.
Si usas php con el include de la conexion es imposible, ya que cada vez que se refresca la pagina o haces algo se crea la nueva conexion al serv.
Lo otro, yo tambien estaba buscando la forma de hacerlo sin este metodo en js que preguntara a cada momento por un mensaje nuevo….
Seguiremos leyendo saludos (=
me parece muy interanse y muy buena idea, en la aplicación de esta teoría está genial ese sistema.