Who is online / Quién está en línea
La nueva versión de Siestta contará, entre otras cosas, con la posibilidad de conocer quién está en línea para así tener la opción de iniciar un chat privado (al estilo Google Talk) y en ello he estado trabajando estos días. La primera parte, conocer quién está en línea la tengo terminada y, aunque seguramente pueda mejorarse, he quedado contento. El procedimiento que sigue la aplicación es el siguiente:
- El usuario se autentifica: en el momento de acceder a la aplicación inserta en la base de datos (tabla online_users) su identificador y el momento del tiempo (datetime) actual.
- Cada vez que un usuario realiza alguna acción (petición ajax en las que se basa la aplicación), el registro de actividad en la tabla online_users se actualizará con la hora, minuto y segundos actuales.
- Cuando el usuario se desconecta (logout), elimina el registro anterior de la tabla online_users.
- Un usuario conectado tendrá un link en su panel de control el cual, al visitarlo, consultará la tabla online_users y mostrará los usuarios que están conectados.
Hasta aquí bien aunque si el usuario no realiza bien el punto 3 y cierra el navegador saliendo de la aplicación sin cerrar la sesión (logout), su registro en la tabla online_users no se borrará. Por tanto, completaremos la acción en el punto 4 añadiendo:
- Cuando un usuario conectado pulse el link en su panel de control para ver los usuarios que están conectados, consultará la diferencia entre el momento actual y la última acción realizada por el resto de usuarios y, si es mayor de 20 minutos (tiempo considerado como de inactividad), eliminará su registro de actividad en la tabla online_users.
Básicamente, se necesitan 5 archivos:
- index.php (acción de login e insert inicial de actividad.)
- iamonline.php (actualiza el registro de actividad cada vez que el usuario realiza una petición ajax. Este script es llamado a través de la función iamonline() dentro de functions.js. La función iamonline() se ejecuta cada vez que existe una petición ajax por lo que está llamada dentro del código de Global Callbacks – on loading)
- backend.php (consulta la diferencia de tiempo para eliminar usuarios “muertos” y muestra los usuarios conectados. Este script es llamado desde functions.js a través de la función whoisonline() que es llamada cada vez que el usuario pica en el link “Ver usuarios online” en index.php)
- functions.js (funciones para manejar los eventos ajax)
- logout.php (cierra sesión y elimina registro de actividad)
No va mal aunque quizá usando archivos de texto en lugar de MySQL no cargaríamos éste.
Saludos.
Bien bien bien… ¡volviendo a las andadas!!
Y con posts constructivos, como siempre
Un abrazo Ramón!
Te agradezco muchísimo todo el trabajo que estás haciendo. Ya he puesto en marcha la aplicación en el centro, de momento de forma experimental con un grupo pequeño, y a los compañeros les le encanta.
Gracias, Ramón.
Un abrazo.
Jose.