Estoy tratando de escribir una aplicación de chat web simple con PHP y AJAX.Hacer un seguimiento de los usuarios que han iniciado sesión en PHP
Necesito ser consciente de todas las sesiones abiertas para que pueda mostrar una lista de usuarios en línea que están disponibles para hablar. También necesito estar al tanto de las salidas porque utilizo "tanto el que envía como el que recibe están fuera de línea" como condición para considerar que una sesión de chat ha finalizado y eliminar los mensajes.
Realizo un seguimiento de los usuarios que inician sesión en una base de datos: agregar una entrada al inicio de sesión y eliminarlo al cerrar la sesión funciona bien, pero no es exhaustivo, ya que hay otras dos maneras de iniciar sesión. fuera:
- la sesión del lado del servidor caduca después de la inactividad.
- cookie del lado del cliente se destruye al cerrar el navegador. Parece una mala idea usar algún tipo de AJAX desencadenado (¿qué pasa si el navegador falla o algo así?).
La solución más sencilla parece ser mantener una marca de tiempo de la última actividad. Veo algunos problemas con esto, sin embargo:
- yo sepa expiración del lado del servidor se basa oportunidad, por lo que no sería exacto (y si me da el tiempo de caducidad 3 minutos equivocado, eso es 3 minutos, donde podría ser un tipo hablando con un usuario sin conexión preguntándose por qué nadie está respondiendo)
- Tendría que consultar constantemente la base de datos para verificar el tiempo de actividad pasado de todos los usuarios conectados en comparación con la hora actual. No veo cuándo/dónde haría esto de manera eficiente. Parece estúpido hacer esto cada vez que se necesita la lista de usuarios en línea.
Cualquier ayuda apreciada. Estoy codificando esto porque no conozco ningún framework de chat web que pueda integrarse con mi base de datos de usuarios existente, corrígeme si me equivoco.
OK, me di cuenta de que en realidad no necesito intentar estimar la marca de tiempo. Dado que cada usuario está constantemente consultando para buscar nuevos mensajes de todos modos, también puedo actualizar la marca de tiempo cada vez que se realiza la consulta, y considerar toda la marca de tiempo> 20 segundos de usuarios inactivos. Así que ahora solo necesito averiguar la mejor manera para que la base de datos elimine automáticamente las entradas con marcas de tiempo anteriores. – Jonathan
@bfavaretto ¡Muchas gracias por haberlo notado! programadores parece el lugar correcto para preguntar, lo hará. – Jonathan