电影选座,基于swoole时时更新数据,这样是否正确
描述:
1.用户A访问选座页面,和服务器建立连接,通知socket服务器,然后从数据库拿到已购买的座位ID,返回给客户端,客户端进行座位锁定。(此步骤之前是用ajax轮训,现在打算换掉ajax用websocket)
2.用户B选择座位下单,此时新的订单入库,用户A的页面如何更新座位数据,是不是在用户B下单后,并且订单信息插入数据库后,再去拿到当前已经和socket建立连接ID,然后推送座位信息。把刚刚购买的座位推送给客户端。
问题:
我上面描述的并没有涉及提交订单15分钟后如果没有支付,那选择的座位将被释放。只是想先把socket这块的逻辑走通,建立长连接,时时更新座位信息,我上面这样的逻辑正确吗,如果不是这样,烦请各位帮忙提供些思路呢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Swoole
应该也有广播事件,之前用
workeman
做过思路是:
swoole搭建websocket服务端,用户长连接websocket,当座位被选了,通知所有选这个座位的客户端。
已经被选的座位,给当前正在选这场电影的页面广播一下。
swoole直接push数据给websocket客户端就可以了,客户端做好onmessage回调处理
1.如果你需要在一个用户够票成功后让所有同时在购票页面的用户都无法点击这个座位,那就需要在A用户完成后光爆所有在线用户这个座位已被购买。
2.15分钟的支付时间,可以给每个位置加个锁,15分钟的过期时间,用redis或者缓存都不难实现吧。
都用swoole了还用什么ajax轮询,有人选座位了,通知给该页面的所有客户端某个位置被选了,页面数据更新一下(不是刷新)就行了。
已经建立了长连接了,就没必要用ajax了。
另外可以用websocket,这个方便一点