Я использую транзакции в базе данных MySQL вместе с Ajax, и у меня возникают некоторые проблемы с тайм-аутами сценариев. Итак, вот краткое изложение того, что происходит:
- Ajax-скрипт на странице делает запрос к серверу.
- Сервер получает запрос; скрипт запускает транзакцию MySQL.
- Сценарий Ajax настроен на тайм-аут через две секунды; время вышло; говорит серверу прервать запрос.
- Серверный скрипт умирает; транзакция оставлена без ответа.
- MySQL замечает, что транзакция была приостановлена; откатывается, как и должно быть, но не раньше, чем кучка клиентов станет недовольна, потому что столы были заблокированы на полминуты, и они не смогли получить доступ к сайту.
Что делать?
Я предполагаю, что серверному сценарию нужно чуть больше времени, чем две секунды, которые он дает, поэтому я вызывал ignore_user_abort()
на каждой странице, а затем вызывал register_shutdown_function()
, чтобы явно откатить транзакцию, если клиент фактически прервал .
Это хороший план? Есть ли альтернатива?