今天面试,遇到个场景问题,说两个人去吃饭,二维码扫一扫点单,他们俩一同扫出一个菜单页面,两个人的点单行为双方都能看到,并且相互影响,点单结束后一个人确认,两个人的菜单同时合并提交,请问,以上用了哪些技术。有人能知道这道题的答案吗,刚工作一年的菜鸟,今天被问的一脸懵逼。
我感觉要用到websocket,貌似只知道websocket能在自己的手机页面看到进入这个页面(房间)其他人操作,相互影响通过程序处理,不知道还考了什么
这种题目没有标准答案!只要能够实现这种效果的就可以。比如说websocket。
1.扫码的行为就是进入一个房间号,两个人之间的就是基于ws交互,数据可以存储在redis中,最后合并之后提交,存数据库操作。
也可以使用轮询
2.也可以是轮询操作,也是可以实现这种效果,只不过websocket的时效性更好。
队列也是一样的。
websocket
数据存储在服务器,处理了同样的数据
ajax+php
使用过二维火,一张桌子一个id,二维码就是一个连接,比如http://www.aaa.com/?id=1扫描二维码就相当于打开一个网页。
点击一个菜品加入购物车,就是用ajax提交菜品id,
当时使用的时候就测试过,我把一个菜品加入购物车,另一个扫描的朋友不会显示菜品已加入购物车,除非刷新页面,所以应该没有用到websocket,消息队列这种高级的东西。
只是刷新页面的时候后端读取购物车菜品,并显示页面而已。
所以二维码点单看上去很高级,其实很简单
用了Ajax异步 或者用swoole,还要redis或者memcached免得数据库压力过大,
AMQP相关
首先,二维码有个固定的标识,各自提交数据的时候,先提到数据库临时表,与二维码固定标识关联,当一个人提交的时候,数据存入正式表,同时删除临时表数据.
标识
使用redis的发布与订阅也是一种方案,顾客作为相应桌子的发布方,服务器订阅每一个桌子的消息,楼上的websocket的方案更好吧
用websocket 是没有问题的,我觉得可以用swoole 的websocket 两个客户端同时操作,相互影响,应该符合您说的应用场景