Я пишу стратегическую многопользовательскую игру для Интернета. У него есть игровое поле (квадраты X по Y), которое я планирую сериализовать и сохранить в BLOB в базе данных MySQL (innodb), по одной строке для каждой продолжающейся игры.
Теперь я попытаюсь найти хороший способ обновления базы данных при любых изменениях игрового поля и в то же время найти удобное решение для того, как обрабатывать события, происходящие с игровым полем, в промежутке времени между загрузкой страница и фактически делает ход.
Я не использую AJAX.
В каждой игре будет не более 20 игроков, каждый из которых делает от 1 до 10 ходов в течение 24 часов, так что это «медленная» игра.
Мой план (на данный момент) также состоит в том, чтобы сохранить своего рода контрольную сумму для игрового поля рядом с BLOB-объектом и сравнить состояние баз данных с загруженным состоянием, прежде чем пытаться вносить изменения в игровое поле.
Что меня беспокоит, так это как предотвратить состояние гонки.
Достаточно ли:
- Начать транзакцию.
- загрузить игровое поле со стола
- если контрольная сумма отличается - откат и обновление представления пользователей
- если контрольная сумма не изменилась - обновить таблицу и зафиксировать изменения
Достаточно ли BEGIN TRANSACTION
, чтобы заблокировать гонку, или мне нужно сделать что-то еще на шаге 2, чтобы показать свое намерение обновить таблицу?
Благодарен за все советы.