Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Concurrencia (https://www.clubdelphi.com/foros/showthread.php?t=30868)

leflaco 20-04-2006 22:39:48

Concurrencia
 
Buenas,
Estoy realizando un sistema web con php y mysql y me queda un tema por resolver: La concurrencia de varios usuarios a un registro. La verdad que no se como hacerlo si alguien me puede dar una mano estare muy agradecido.

Saludos

Emilio 20-04-2006 23:26:18

Durante bastante tiempo hice uso de un ficherito de texto para el tema de los bloqueos, es decir se trata de hacer una secuencia en la que obligas a los usuarios a ir en fila india.

Abres un ficherito de texto, bloqueas el ficherito, hace tus inserts o updates, desbloqueas el fichero de texto.

De esta forma si un usuario intenta acceder simultanemante deberá esperar a que el fichero este desbloqueado.

Otra forma de hacerlo es enviar todas las consultas a una tabla, y tener un proceso ejecutándose constantemente que mira si hay registros en la tabla, si los hay, se encarga de ejecutar las sentencias SQL guardadas en la tabla, de esta forma también te aseguras que siguen un orden.

roman 21-04-2006 00:07:01

Pero, si se trata de muchos accesos, este ficherito ¿no se convierte en un cuello de botella?

// Saludos

Emilio 23-04-2006 11:41:24

Cita:

Empezado por roman
Pero, si se trata de muchos accesos, este ficherito ¿no se convierte en un cuello de botella?

Con muchos muchísimos es posible que sí, aunque a mi nunca me ha dado problemas, en realidad la razón del ficherillo es la de simular una transacción en sistemas que no te permiten hacer uso de rollback y commit, lease (iSerires con DB2)+(Linux con DbConnect+PHP), muy a pesar de la pasta que cuesta esta combinación, para hacer uso de odbc_rollback() y odbc_commit() tienes que configurar tu iSeries con el diario activo, en mi caso concreto no podía hacerlo, suponía una seria penalización al rendimiento de otras aplicaciones del iSeries, de ahí que surgiese la idea del bloqueo de un fichero.

Seguramente nuestro amigo no tiene tantas restricciones y puede hacer uso de técnicas menos enrevesadas.

Perberos 06-05-2006 06:39:05

Cita:

Empezado por leflaco
Buenas,
Estoy realizando un sistema web con php y mysql y me queda un tema por resolver: La concurrencia de varios usuarios a un registro. La verdad que no se como hacerlo si alguien me puede dar una mano estare muy agradecido.

Saludos

Hola, Por lo que entiendo.

1 - Queres saber el tiempo que estan conectado los usuarios.
2 - Queres saber quienes son los que se conectan.

Para la primera, te recomiendo utilizar javascript. (pero se puede hacer de otra manera. con solo php) digamos que cada 5 o 10 minutos, haces un HTTPResquest a un php para sumar el tiempo.

Para la segunda, podes utilizar un contador, y un time()
Me explico mejor:
En el row del usuario (fila) dentro de la base de datos, podes crear una columna que diga 'visit_count' del tipo integer.
Y otra que diga 'last_visit' del tipo integer o datatime (era asi? no recuerdo bien)

Bueno, no confundo mas :D

roman 06-05-2006 06:52:35

Hola, no estoy muy seguro de si esto tiene que ver con lo que se pregunta, ni si a leflaco realmente le importan las respuestas, pero me llama la atención esto

Cita:

Empezado por Perberos
Para la primera, te recomiendo utilizar javascript. (pero se puede hacer de otra manera. con solo php) digamos que cada 5 o 10 minutos, haces un HTTPResquest a un php para sumar el tiempo.

Me parece buena idea el uso de ajax. Ahora, mencionas que puede hacerse sólo con php. ¿cómo sería esto? De hecho, creo que nunca lo había pensado, ¿cómo hace un sistema como el de estos foros para medir el tiempo de actividad?

Y por cierto, ¡bienvenido a los foros!

// Saludos

Perberos 06-05-2006 07:55:01

Hola, gracias por la bienvenida, hace mucho que no visitaba este foro. lo veo mas bonito :D

a ver... improvisemos un sistema...

digamos que al ingresar el usuario a una funcion init();
que digamos que esté en el de reconocimiento del usuario. cookies.php, o common.php

Tenemos el valor, 'lastvisit' y digamos que usamos el tipo int(11) obtenido del time();

Bien ahí, convengamos que tambien asignaremos un rango de conexion. es decir, 10 min sin ingresar es inactividad.
entonces, comparamos.
Código PHP:

if ( $lastvisit 5*60*10 time() ) //Comprobamos el lapso de petision
{
  
$standtime time() - $lastvisit//añadimos los segundos de sesión
  
$lastvisit time(); //actualizamos última visita
}
// de esa forma se obtiene $standtime, con los segundos de peticiones
// entre cada pagina, con un rango de 5 minutos o 300 segundos.
// pero hay que tener cuidado de donde se coloca este codigo.
// sobre todo si no se actualiza el $lastvisit 

con eso se puede medir facilmente, el tiempo de petision de un usuario. pero (siempre hay un pero ;P)
hay que tener en cuenta que los usuarios que ingresan a la pagina, ... mas de uno se toma su tiempo para leer las cosas, e incluso re-leerlas.
por lo que hay que elegir bien el tiempo rango.

Código PHP:

@define('USER_RANGESESSION'5*60*10 time());
if ( 
$lastvisit USER_RANGESESSION )
{
  
$standtime time() - $lastvisit;
  
$lastvisit time();


saludos, y perdon por lo extenso :3


La franja horaria es GMT +2. Ahora son las 21:44:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi