Foros del Web » Programando para Internet » PHP »

Mejorar script usuarios online

Estas en el tema de Mejorar script usuarios online en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 16/07/2005, 01:57
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 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)
  #2 (permalink)  
Antiguo 16/07/2005, 02:21
Avatar de DvD AdN  
Fecha de Ingreso: mayo-2005
Ubicación: Frente al monitor
Mensajes: 610
Antigüedad: 18 años, 11 meses
Puntos: 0
Y guardar el conteo en un archivo de texto???
__________________
Keep f***ing learning
Ask for f***ing help.
Use f***ing spell check.
Think about all the f***ing possibilities.
  #3 (permalink)  
Antiguo 16/07/2005, 02:41
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por DjNelson
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?
No con PHP. La única manera es almacenar ese valor en un archivo (txt, xml, etc.) o en la base de datos para que todos tengan acceso a la misma fuente.

Saludos
  #4 (permalink)  
Antiguo 16/07/2005, 03:41
 
Fecha de Ingreso: diciembre-2003
Mensajes: 218
Antigüedad: 20 años, 4 meses
Puntos: 0
Yo almacenaria la direccion IP y la web q esta viendo en este momento. Puede ser interesante.
__________________
SymbianForever
SymbianForever.com, todo sobre y para tu symbian
aNieto2K | Themes para WordPress
De todo un poco
  #5 (permalink)  
Antiguo 16/07/2005, 10:49
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Con un archivo de texto lo tenía antes (simplemente guardaba el contador) pero lo mejoré almacenando la ip y el timestamp en una tabla de la base de datos...

Sabéis si con php se puede trabajar con archivos en modo binario igual que con c?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
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 15:16.