如题,今天在面试中遇到的问题
|  |      1wy315700      2015-05-06 15:51:13 +08:00 以服务器时间为准吧。 | 
|  |      2b821025551b      2015-05-06 15:53:37 +08:00 客户端显示只做参考,真正校验的是服务器时间 | 
|      3paranoidboy OP @wy315700 不是,秒杀是要以客户在浏览器端点击的时间顺序决定谁抢到吧,怎么获取那个精确时间,要知道客户是可以修改本地时间的 | 
|      4myywin      2015-05-06 15:58:04 +08:00 @paranoidboy 以服务器接收到客户端请求的时间为准 | 
|      5feiyuanqiu      2015-05-06 15:59:04 +08:00 @paranoidboy 想多了吧... 秒杀请求到达服务器的时候,检查商品是否已经到了秒杀开始时间,没到就返回错误 到了时间就检查商品的秒杀状态,如果商品没有被秒杀那这个客户就抢到了,然后更新商品的秒杀状态 之后的请求来的时候检查商品状态已经被秒杀了,自然也就秒不到了 | 
|  |      6learnshare      2015-05-06 16:06:01 +08:00 即使本地时间修改过,服务端也会验证是否到时 | 
|  |      7wy315700      2015-05-06 16:19:27 +08:00 | 
|  |      8mcone      2015-05-06 16:22:04 +08:00 > 秒杀是要以客户在浏览器端点击的时间顺序决定谁抢到吧 洗洗睡吧,这样的话如果我抓包模仿一下数据交互协议,我就可以随心所欲了? | 
|  |      9Perry      2015-05-06 16:29:26 +08:00 via iPhone 楼主没做过后端么? | 
|  |      10bigdude      2015-05-06 16:32:00 +08:00 模版输出的时候带上timedelta,就是服务器端秒杀时间-当前时间的差,然后用setInterval倒计时。如果本地用了变速齿轮,好像也不行啊。 关键还是得服务器端验证请求。 | 
|      11superliang      2015-05-06 16:37:16 +08:00 话说后端很难获得客户的时间吧,都是按照服务器时间为准的。前端显示时间也是以服务器时间为准然后进行倒计时的,难道忘了:永远不要相信客户端提交的数据 | 
|  |      12a591826944      2015-05-06 16:38:48 +08:00 LZ 想多了 | 
|  |      13slixurd      2015-05-06 16:41:11 +08:00 就算是服务器返回时间差也不行吧 如果一个请求在高并发下返回花了2秒,你原本返回的时间差就和正确时间不同了 所以还是不停发请求进队列,以服务器时间为准比较靠谱。 | 
|  |      149hills      2015-05-06 16:43:27 +08:00 服务端设一个FIFO队列,发的请求如果在秒杀开始时间之前,就拒绝,否则扔到FIFO队列中 秒杀开始后,从FIFO队列中顺序取出请求处理即可。 | 
|  |      159hills      2015-05-06 16:43:56 +08:00  1 不过其实你做成随机选的。。反正用户也发现不了,反而更公平 | 
|  |      17hanwujibaby      2015-05-06 18:38:16 +08:00 好奇怪的问题。我想知道原题是什么样的??不知道LZ能否告知?我不太清楚后端为什么要知道前端的时间,因为完全没有必要啊。一般来说的话这样的秒杀都是在后端用队列做的。FIFO,逐一处理。 | 
|      18paranoidboy OP 来自网友akunamotata 的回答: 客户端时间是绝对不能用的,一般通过ajax获取服务器时间作为秒杀时间吧,或者建立长连接判断时间。 还有一种思路是使用客户端时间,但是每次进入页面的时候去服务器校对时间,每隔一定时间校对一次。 | 
|      19paranoidboy OP @hanwujibaby 老实说我也不知道怎么描述原题,是今天在阿里巴巴实习二面遇到的,提问者是玉伯,也许是我理解有误 | 
|      20pandada8      2015-05-06 20:06:42 +08:00 后端直接看请求到达的时间,不管前端((( | 
|  |      22loveuqian      2015-05-06 20:51:14 +08:00 做到完全精确同步基本上是没可能吧 就算局域网内也是有一点点点点点点点点点的时差的 为了防止作弊,只能在服务端再做一次时间验证 | 
|  |      23lalalanet      2015-05-20 09:44:32 +08:00 同步毛线啊.....  第一次请求的时候给个剩余毫秒,客户端自己setTimeout去吧 |