我正在使用 PHP 和 MySQL 编写酒店预订软件。我几乎完成了它,但我遇到了竞争条件问题。例如,仅剩一间标准房,当 2 位客人都选择时,显示可供两人入住。当客人在付款前单击确认时,我尝试通过再次检查房间来修复它,但这仍然存在问题。当谁先点击确认时,我也尝试将房间状态设置为待处理,但如果客人决定不付款或只是关闭浏览器,我不知道如何将其更改回可用状态。我搜索了答案,但我并没有真正找到明确的答案。提前致谢
问问题
3701 次
2 回答
14
一种解决方案是将两列添加到数据库中的表中。一列是会话 ID 或用户 ID 或提供房间的用户的任何内容。第二列是指示该优惠何时到期的时间戳。
然后,在您的应用中,仅在保留列中显示具有过期时间戳的房间。(将初始时间戳设置为 0 以使其开始过期。)选择房间后,再次检查该列。如果那里有一个未过期的时间戳,用户会收到“对不起,你太慢了”的消息。否则,将时间戳放在那里 15 分钟到未来或其他任何时间,然后继续。
你在旅游网站和购票网站上经常看到这种情况,上面写着“我们会再为你保留这些座位 14 分钟。请在那时完成交易,否则它将被释放等等。”
于 2012-10-11T05:12:05.570 回答
1
我也会选择待定状态。您可以将状态与该用户的会话 id 一起保存,并有一个 cronjob 删除所有与它们相关联的过期会话 id 的挂起状态。
于 2012-10-11T05:12:17.770 回答