首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电影票预订的有效方法

电影票预订的有效方法
EN

Stack Overflow用户
提问于 2018-03-06 18:30:39
回答 1查看 3K关注 0票数 1

我正试图找出一个有效的方法,电影票预订系统。我主要关注的领域是处理一个用户的并发预订,即两个或多个用户试图在给定的时间内预订相同的座位。

许多在线解决方案都建议通过同步来处理并发,即使事务对其他用户可见(类似于java中的同步方法/块)。

我认为,上面的方法可能不是一个可伸缩的解决方案,因为如果请求的数量增加到百万/秒。我们不能指望这些事务一个接一个地线性化。它会造成很大的延迟。

我的方法之一是保持座位的状态,就像

代码语言:javascript
复制
EMPTY
IN_PROGRESS
BOOKED

单击“支付”按钮后,状态从“空”更改为“IN_PROGRESS”。因此,其他用户选择相同的座位并单击支付按钮,可以对座位的状态进行检查,如果是IN_PROGRESS,则可以显示合适的消息。

如果已通过付款的用户,如果成功的座位状态更改为预订,如果失败的状态将更改为空。

请告诉我,我的方法是否有任何问题,或是否有任何有效的方法处理并发在座位预订。谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-08-09 10:15:33

我认为您可以在这里使用的最佳方法是创建一个会话,该会话将在应用程序中设置的分钟数之后过期。您希望为用户提供选择可用的座位号的能力。

然后发送一个帖子请求到后端锁定那些座位的时间。如果会话到期,则处理事件并解锁这些座位。否则,等待付款成功。一旦付款被处理,您只需要增加整个筛选时间的锁定窗口。

使用这种方法,您将能够避免多个用户预订同一个座位的问题。

可以使用像{ "locked" : true, "lock_expires": 163457987 }这样的属性。

如果为时已晚,请检查lock_expires属性并设置locked: false并重定向或刷新页面。否则,设置"lock_expires": <time when screening ends>

可以实现一个cron作业,它每分钟运行一次,以验证所有锁。如果lock_expires没有通过验证,那么locked将自动设置为false。如果用户离开选项卡或关闭浏览器,这将非常有用。

如果有人有更好的解决方案,那么请评论,我会更新它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49137688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档