Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/07/2005, 01:57
DjNelson
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 8 meses
Puntos: 0
Mejorar script usuarios online

Actualmente hago esto para saber cuántos usuarios hay online en mi web:
Código:
<?php 
//cada vez que un usuario pincha en alguna parte borramos los usuarios que llevan más de 5 minutos sin hacer nada
mysql_query("delete from users_online where fecha < '".(time()-300)."'",$id_conexion) or die (mysql_error());

//Cada vez que un usuario pincha en alguna parte comprobamos si es un registrado y anotamos la fecha
if (isset($_SESSION['uid'])){
	//comprobamos si el usuario registrado está online
	$resultado=mysql_query("SELECT quien FROM users_online WHERE quien = '".$_SESSION['uid']."'",$id_conexion) or die (mysql_error());
		
	if (mysql_num_rows($resultado)>0) mysql_query("update users_online set fecha = ".time()." where quien = '".$_SESSION['uid']."'",$id_conexion) or die (mysql_error());
	else mysql_query("insert into users_online (identificador,fecha,quien) values ('','".time()."','".$_SESSION['uid']."')",$id_conexion) or die (mysql_error());
}
else{
	//comprobamos si el visitante está online
	$resultado=mysql_query("SELECT quien FROM users_online WHERE quien = '".$_SERVER['REMOTE_ADDR']."'",$id_conexion) or die (mysql_error());
		
	if (mysql_num_rows($resultado)>0) mysql_query("update users_online set fecha= '".time()."' where quien = '".$_SERVER['REMOTE_ADDR']."'",$id_conexion) or die (mysql_error());
	else mysql_query("insert into users_online (identificador,fecha,quien) values ('',".time().",'".$_SERVER['REMOTE_ADDR']."')",$id_conexion) or die (mysql_error());
}
?>
Como se puede ver cada vez que un usuario hace click en alguna parte y se ejecuta el script se envían 3 consultas al servidor, una de borrado, una de actualización o inserción y otra de selección de los nuevos valores.

Quería optimizar este código ya que me parecen demasiadas consultas teniendo en cuenta que en un mismo momento puede haber 10 usuarios online y que cada uno de ellos haga una media de 10 clicks entonces nos salen 300 consultas enviadas al servidor solo para saber los usuarios online...

Uso sesiones.

Entonces había pensado en pasar de mysql y cada vez que un usuario entra contar uno en una variable guardada en la sesión, el problema es que no sé si se puede hacer eso para todos los usuarios juntos, es decir, cada usuario tiene su propia sesión, de manera que si tengo una variable llamada, por ejemplo, us_online y le sumo 1 cuando llega un usuario, esa misma variable no es la misma us_online que la que tiene otro usuario, es decir, no es 'global' para todos los usuarios sino que a cada usuario le pondrá 1...

Se podría tener una variable 'global' (para todos los usuarios, no global para uno solo) e ir contando en ella los usuarios que van llegando?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)