电影选座,基于swoole时时更新数据,这样是否正确

发布于 2022-09-06 12:21:15 字数 352 浏览 22 评论 0

描述:
1.用户A访问选座页面,和服务器建立连接,通知socket服务器,然后从数据库拿到已购买的座位ID,返回给客户端,客户端进行座位锁定。(此步骤之前是用ajax轮训,现在打算换掉ajax用websocket)

2.用户B选择座位下单,此时新的订单入库,用户A的页面如何更新座位数据,是不是在用户B下单后,并且订单信息插入数据库后,再去拿到当前已经和socket建立连接ID,然后推送座位信息。把刚刚购买的座位推送给客户端。

问题:
我上面描述的并没有涉及提交订单15分钟后如果没有支付,那选择的座位将被释放。只是想先把socket这块的逻辑走通,建立长连接,时时更新座位信息,我上面这样的逻辑正确吗,如果不是这样,烦请各位帮忙提供些思路呢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

自由如风 2022-09-13 12:21:16

Swoole 应该也有广播事件,
之前用 workeman 做过
思路是:

用户进入选座 =>  用户加入某个组(比如电影A组)
A用户订票 => 推送(广播事件)推给电影A组 => B用户接收到数据判断是哪个座位(进行锁定操作)


金橙橙 2022-09-13 12:21:16

swoole搭建websocket服务端,用户长连接websocket,当座位被选了,通知所有选这个座位的客户端。

久夏青 2022-09-13 12:21:16

已经被选的座位,给当前正在选这场电影的页面广播一下。

好菇凉咱不稀罕他 2022-09-13 12:21:16

swoole直接push数据给websocket客户端就可以了,客户端做好onmessage回调处理

涙—继续流 2022-09-13 12:21:15

1.如果你需要在一个用户够票成功后让所有同时在购票页面的用户都无法点击这个座位,那就需要在A用户完成后光爆所有在线用户这个座位已被购买。
2.15分钟的支付时间,可以给每个位置加个锁,15分钟的过期时间,用redis或者缓存都不难实现吧。

圈圈圆圆圈圈 2022-09-13 12:21:15

都用swoole了还用什么ajax轮询,有人选座位了,通知给该页面的所有客户端某个位置被选了,页面数据更新一下(不是刷新)就行了。

往事随风而去 2022-09-13 12:21:15

已经建立了长连接了,就没必要用ajax了。
另外可以用websocket,这个方便一点

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文