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

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

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

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

阅读 5.4k
7 个回答

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

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

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

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

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


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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题