我正在尝试建立一个电影票务系统。但我无法理解如何解决以下用例:
知道如何做到这一点吗?我们能通过避免页面重新加载来异步地完成阻塞和解除阻塞吗?
我已经找到了解决方案,并找到了以下相关问题:如何处理向Paypal支付有限数量的项目的潜在并发问题?
但这对我没什么帮助。我肯定我得把这件东西从货架上取下来一段时间。但技术上如何做到这一点呢?我应该更新数据库以使那个座位被封锁吗?如果我这样做了,如何在失败或用户放弃系统时解除阻塞?如何异步更新UI?
发布于 2017-08-19 08:50:55
电影票务面临的挑战是,随着电影开始时间的临近,争论达到顶峰。
有两个部分是耗时的:选择(有些人甚至不关心彼此之间的关系)和付费(通常由外部Two服务处理)。因此,您可以通过选择以下选项之一来改善这种情况:
使锁定时间大大缩短(例如2分钟),但允许每次用户活动时(鼠标和键盘事件)扩展会话。如果用户选择屏幕能够反映座椅状态的变化,这将更好。
乐观点。不要锁定,并解释它的先到先得,并预订在付款结束时的座位。如果所需的座位不再可用,请提出新的选择(但不需要付款:可以立即预订)或退款(我假设付款是在外部系统上完成的,您不能影响其事务管理)。
然而,如果只剩下几个位置,或者他们只是不关心座位位置,这可能会让用户感到不安。
这是一种乐观主义方法的变体,它可以大大减轻用户的压力:询问有多少座位,什么是首选区域(例如前、中、后)。确认可用性,付款,然后预订连续的座位,如果可能的话,在首选的地区或其他地方,如果没有。通知使用者他已订好的座位,如果不高兴,可以选择其他座位。
当大多数人不想要一个非常特定的座位时,这样做是最好的,让您的系统优化分配,同时最小化锁定。
你没有给出很多关于你的项目的技术信息,所以很难帮助你。一种可能的方法是使用会话id将座位标记为临时预订,并在会话过期时取消相关预订(选项1)。另一种方法是使用数据库的事务性管理 (选项2和3):未能完成事务表明另一个会话已经获得了位置。
https://softwareengineering.stackexchange.com/questions/355903
复制相似问题