我在 MySQL 数据库中使用事务以及 Ajax,并且遇到了脚本超时的问题。所以,这里是发生的事情的概要:
- 页面上的 Ajax 脚本向服务器发出请求。
- 服务器接收请求;脚本启动 MySQL 事务。
- Ajax 脚本设置为两秒后超时;超时;告诉服务器中止请求。
- 服务器脚本死亡;交易挂起。
- MySQL 通知事务已挂起;按预期回滚,但在一群客户变得不高兴之前,因为桌子被锁定了半分钟,他们无法访问网站。
该怎么办?
我想服务器脚本只需要比给定的两秒多一点的时间,所以我ignore_user_abort()
在每个页面上调用,然后register_shutdown_function()
如果客户端实际上已中止,则调用以显式回滚事务。
这是一个好计划吗?有替代方案吗?