Pregunta

Estoy escribiendo una estrategia de tipo de juego multi usuario para la web. Cuenta con un campo de juego (X Y por cuadrados) que planeo serializar y guardar en un BLOB en una base de datos MySQL (InnoDB), una fila para cada juego en curso.

Ahora trato de encontrar una buena manera de mantener la base de datos actualizada con los cambios en el campo de juego, y al mismo tiempo encontrar una solución conveniente a cómo manejar las cosas que suceden en el campo de juego en el período de tiempo entre la carga de la página y realmente hacer un movimiento.
Yo no uso de AJAX.

No será como máximo de 20 jugadores en cada juego, cada jugador toma entre 1 y 10 movimientos en 24 horas, por lo que es un juego "lento".

Mi plan (hasta ahora) es almacenar también una especie de suma de comprobación para el campo de juego junto a la mancha y comparar el estado de las bases de datos con el estado cargado antes de intentar realizar cambios en el campo de juego.

Lo que me preocupa es cómo evitar las condiciones de carrera.
¿Es suficiente con:

  1. Comenzar transacción.
  2. campo de juego de carga de la mesa
  3. si difiere de suma de comprobación - rollback y actualizar los usuarios ver
  4. Si la suma de comprobación sin cambios - tabla de actualización y confirmó cambios

Es la suficiente BEGIN TRANSACTION para bloquear la carrera, o necesito hacer algo más en el paso 2 para mostrar mi intención de actualizar la tabla?

agradecido por todos los consejos.

¿Fue útil?

Solución

Si utiliza SELECT ... FOR UPDATE cuando se carga el campo de juego de la base de datos, se bloqueará hasta que otras selecciona confirmar o deshacer la transacción.

Otros consejos

No. Usted tendrá que emitir un comando LOCK tablas para las tablas que necesita para proteger contra cambios conflictivos. Esto sería algo como ...

LOCK TABLE my_table WRITE;

Más detalles se pueden encontrar aquí ... http: //dev.mysql.com/doc/refman/5.1/en/lock-tables.html

No se olvide de desbloquearlos después!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top