今天面试PHP遇到的问题,有人能给解答一下吗?

今天面试,遇到个场景问题,说两个人去吃饭,二维码扫一扫点单,他们俩一同扫出一个菜单页面,两个人的点单行为双方都能看到,并且相互影响,点单结束后一个人确认,两个人的菜单同时合并提交,请问,以上用了哪些技术。
有人能知道这道题的答案吗,刚工作一年的菜鸟,今天被问的一脸懵逼。

阅读 6.9k
13 个回答

一种思路:

使用websocket进行通信,可以类比聊天室。

一个二维码(或者一个桌的二维码)可以通过参数标识识别为同一个房间,两个人都在点单,每个人点单都会互相触发消息,将点单结果罗列。每个人都可以对点单的内容进行各种操作(操作同样能够通过websocket消息触发)。

这样就是实时的,最后一个人确认下单的列表,提交即可。(这个过程会有一些一些细节,比如一个人点了一个菜,这个人就不能再点)。

如果不用websocket,可以使用 ajax + SSE 一样的效果。这种问题问的很开放,用到了哪些技术,随便扯就行。

ajax+php

使用过二维火,
一张桌子一个id,二维码就是一个连接,比如http://www.aaa.com/?id=1
扫描二维码就相当于打开一个网页。

点击一个菜品加入购物车,就是用ajax提交菜品id,

当时使用的时候就测试过,我把一个菜品加入购物车,另一个扫描的朋友不会显示菜品已加入购物车,除非刷新页面
所以应该没有用到websocket,消息队列这种高级的东西。

只是刷新页面的时候后端读取购物车菜品,并显示页面而已。

所以二维码点单看上去很高级,其实很简单

首先,二维码有个固定的标识,各自提交数据的时候,先提到数据库临时表,与二维码固定标识关联,当一个人提交的时候,数据存入正式表,同时删除临时表数据.

这个过程应该是并发执行的啊

数据存储在服务器,处理了同样的数据

请问,以上用了哪些技术

这里即没有限定是浏览器环境,也没有限定是 HTTP 协议。
所以,最简单的处理方式,就是客户端直接创建 2 个连接,以 RPC 方式,一个连接主动,一个连接被动。
没有任何“技术”,最普通,最基本的网络编程知识。

使用redis的发布与订阅也是一种方案,顾客作为相应桌子的发布方,服务器订阅每一个桌子的消息,楼上的websocket的方案更好吧

这种题目没有标准答案!只要能够实现这种效果的就可以。
比如说websocket。

1.扫码的行为就是进入一个房间号,两个人之间的就是基于ws交互,数据可以存储在redis中,最后合并之后提交,存数据库操作。

也可以使用轮询

2.也可以是轮询操作,也是可以实现这种效果,只不过websocket的时效性更好。

队列也是一样的。

新手上路,请多包涵

我感觉要用到websocket,貌似只知道websocket能在自己的手机页面看到进入这个页面(房间)其他人操作,相互影响通过程序处理,不知道还考了什么

用websocket 是没有问题的,我觉得可以用swoole 的websocket 两个客户端同时操作,相互影响,应该符合您说的应用场景

用了Ajax异步 或者用swoole,还要redis或者memcached免得数据库压力过大,

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