Несколько проблем с социальной игрой

#php #javascript #jquery #transactions

#php #javascript #jquery #транзакции

Вопрос:

Я разрабатываю одну социальную игру, которая похожа на игру friends for sale.

В игре пользователь покупает и продает друзей.
Покупатель пользователя становится владельцем этого пользователя.

Я разработал логику, и она работает идеально в соответствии с вычислениями.

Но когда у нас много пользователей, возникает проблема с этим действием кнопки покупки.

Например, 5 пользователей находятся в одном профиле, т.е. UserXYZ. Теперь 2 из них нажимают на кнопку покупки одновременно, в ту же секунду.

С обоих аккаунтов теряется сумма наличных, но владельцем становится только один.

Я хочу прекратить эту проблему с потерей денег.

Эта проблема возникает из-за того, что скрипт выполняется одновременно для обоих пользователей, но только один из них становится владельцем.

Я понятия не имею, как остановить это из-за кликов по продаже. Веб-сайт написан на PHP / MySQL.

Любая помощь будет действительно оценена.

Комментарии:

1. На самом деле это не вопрос javascript или AJAX — это больше об управлении транзакциями на сервере.

2. Недостаточно конкретно. Пожалуйста, опубликуйте свой код, чтобы мы могли помочь решить вашу проблему.

3. заблокируйте свой стол, также логика, вероятно, неверна, поскольку это происходит…

4. Спасибо за ваш ответ. В PHP MySQL у нас есть блокировки на уровне таблицы. Если пользователь1 и пользователь2 находятся на странице пользователя 3, блокировка будет занята одним пользователем, но проблема в том, что одновременно пользователь4 и пользователь5 будут находиться на странице пользователя 6, но ни один из них не сможет получить доступ к блокировке, потому что это блокировка на уровне таблицы, а блокировка занята пользователем 1 / пользователем 2. Я думаю, это приведет к тупику.

Ответ №1:

не видя никакого вашего кода, я не могу дать кодовый ответ, но теоретически я бы исправил это следующим образом:

  1. когда вы отправляете запрос ajax «купить друга», отправьте вместе с ним текущий идентификатор владельца.
  2. В вашем php проверьте, есть ли у друга, которого покупают, тот же владелец, если это так, сделайте продажу, если нет, ответьте дружеским сообщением «извините, их купил кто-то другой»

Комментарии:

1. Спасибо за ваш ответ. При вызове ajax я выбираю последнего владельца. Например, User121 является последним владельцем UserXYZ. Но проблема в том, что два пользователя нажимают одновременно в одну и ту же секунду, поэтому ajax вызывается от обоих покупателей в одну и ту же секунду, и, конечно, владелец еще не изменился. Как только любой из них получит этого пользователя, он / она станет новым владельцем. Но оба пользователя теряют деньги, и только один становится владельцем.

Ответ №2:

Вместо того, чтобы вычитать деньги из внешнего интерфейса, вычтите деньги из бэкэнда после того, как пользователь был успешно добавлен к этому владельцу. Таким образом, вы избегаете проблемы. Убедитесь, что вы передаете ownerid серверной части, что вы уже должны делать.