Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/01/2004, 12:21
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La forma tradicional (en PHP) de solventar ese problema de concurrencia en un proceso suele ser la de:

1) Gestionar la entrada de los usuarios al sistema. Autentificación.
2) Seguimiento del usuario en las procesos que interviene
3) gestión de esa variable tipo "flag" (bandera .. cerrojo o como la quieras llamar).
4) gestión de tiempos de expiración del usuario o "estado de inactividad).

Eso sería más o menos los pasos a seguir.

El usuario que entra al script que procesa esa lectura del archivo/acciones sobre el .. coloca ese "flag" a 1 como "estoy trabajando en este archivo" (para eso te hará falta tener una tabla tipo "archivo -> estado" que guarde el archivo y su estado (flag)) .. Si entra otro usuario a ese archivo (por tu scirpt.php que va a dar el acceso a el) .. miras el estado de ese flag .. si está a 1 .. no puede hacer nada tu nuevo usuario ..

Tu usuario que entró a modificar ese archivo al salir .. colocaría ese flag en modo 0 ..

El problema viene cuando el usuario que entra primero .. no abandona tu aplicación por el "logout" .. es decir . que no usa tu rutina que colocará ese flag a 0 para permitir que otros usuarios puedan modificar ese archivo.

Para solventar esos problemas .. se suele usar tiempos; guardando el tiempo en el que el usuario entra a modificar ese archivo. Se le otorga un tiempo máximo de "inactividad" .. Es decir .. si no interactua con el servidor en cierto tiempo .. se considera que no está usando ese proceso. Esto implica que ese tiempo de "modificando archivo" se actualice con toda interacción con el servidor: una recarga de página .. una acción sobre un formulario .. link que active ..etc.

Las rutinas clasicas de "Usuarios activos" (en las FAQ's tienes un ejemplo) gestionan así los tiempos de inactividad ..


Si usases Base de datos .. estas ya implementan funciones para bloquear tablas/registros con unas pocas instrucciones (lo que no gestionan son esos tiempos de "inactividad". Tambien gestionan perfectamente el tema de "transacciones" pero eso se refiere al momento exacto en el que se ha de procesar la información (ejemplo hacer una consulta .. obtener el último ID de esa tabla y actualizar otra tabla) pero no en los tiempos "muertos" que hay entre el que un "operador" (usuario) abre un archivo/registro/tabla y lo modifica o deja de usarlo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.