[新手请教] PHP 如何向前端主动发起操作

2017-10-09 18:25:25 +08:00
 spip232

类似秒杀的一个活动,现在的问题是,当商品被抢走后,怎么向前端发起信息,让在线用户看到该商品被标记成已结束抢购?后台使用 php 新手求指导,请前辈详细说下思路,非常感谢

4790 次点击
所在节点    PHP
41 条回复
silov
2017-10-09 18:35:29 +08:00
1.前端主动校验
2.socket
yhxx
2017-10-09 18:47:02 +08:00
没写过秒杀,瞎猜一下
用库存行吗
sgq1990
2017-10-09 18:57:46 +08:00
长连接 swoole webSocket
keenwon
2017-10-09 19:01:42 +08:00
server send event
shoaly
2017-10-09 19:04:44 +08:00
1 我看到的网站都是这样处理的, 不用告诉前端已经抢完了, 前端继续提交交易订单, 然后再订单提交的地方后端这个时候再查库存, 如果发现没有库存, 那么下单就失败并且提示用户秒杀的商品没有了!
2 事实上的秒杀如果真的访问量非常大的话, 并不会去实时检查这个库存的, 太费资源, 步凑 1 中严格说来 涉及到事务锁操作
spip232
2017-10-09 19:13:51 +08:00
@shoaly 秒杀库存只有 1 件,我是想当商品被抢了之后,当前打开的用户会看到商品已经被抢的标记(结束了),对于您说的 1 我是有提示的,但是现在我不懂向前台发送操作,商品开始秒杀后,即时被抢了,已经打开的商品列表中商品的倒计时还是不停的倒计下去,我就想被抢了就停止倒计时并标记结束
spip232
2017-10-09 19:14:29 +08:00
@sgq1990
@keenwon
@silov
好的,我搜索下
Immortal
2017-10-09 19:28:57 +08:00
感觉你思路走偏了
一般处理逻辑是这样的:
1\所有用户进入页面,看到的都是倒计时,然后抢购开始
2\某一个用户抢购成功,其他用户(等待倒计时结束并停留在页面中的用户)还是在能够点击抢购,但是服务端返回已被购买,然后页面变成已结束
3\这时候如果新用户进入到当前页面,直接是结束状态

这样是不会涉及主动推送的,虽然你这样用户体验会好一些.
而且这种我个人觉得轮询都够了,上 websocket 不是很有必要,比如在抢购开始后几秒检查一下状态
spip232
2017-10-09 19:55:42 +08:00
@Immortal 有个商品列表页的,这个列表页的商品会一直倒计时,如果商品被抢了,不提示就一直倒计时,这样给用户的感觉不好,看起来还在进行,点进去又结束,用户体验不好
spip232
2017-10-09 19:58:49 +08:00
@Immortal 你说的是商品详情页,是我没说清楚,我现在要解决的是列表页,就是有很多商品同时在倒计时状态,然后可能某一件被抢购了,就要标记那个商品结束了而不是继续倒计时
dobelee
2017-10-09 20:01:12 +08:00
需要前端主动 ajax 才行。现在可以考虑 Websocket,但是很少这么做的。
spip232
2017-10-09 20:08:30 +08:00
@keenwon 了解了下 SSE,应该能满足我的需求,谢谢您
spip232
2017-10-09 20:09:15 +08:00
@dobelee 我尝试了 AJAX,定时请求,但是消耗有点大,就又去掉了
spip232
2017-10-09 20:09:57 +08:00
@dobelee 因为是在商品列表页使用
Pastsong
2017-10-09 20:30:54 +08:00
SSE 标准已经被边缘化了,而且 MS 系浏览器不支持(不打算支持)
spip232
2017-10-09 20:43:24 +08:00
@Pastsong 嗯,搜索到的资料也不多,SSE 在单个商品页我还能处理,可是在商品列表页怎么处理我弄不明白,SSE 能传递参数吗?
@keenwon
qiayue
2017-10-09 20:47:08 +08:00
websocket 轻松解决
spip232
2017-10-09 20:51:32 +08:00
@qiayue 因为 ws 还要 python,后台还要安装其他的,我还没搞明白,新手。。。
singer
2017-10-09 20:54:01 +08:00
1、Swoole 的 websocket,秒杀结束了就向所有的连接发送秒杀结束的请求,
2、同一,断开连接(前端用 js 判断断开后小时结束秒杀)
3、前端主动请求后端,不断请求,直到秒杀结束。(服务器消耗特别大)
spip232
2017-10-09 20:55:56 +08:00
@singer 您说的这个是不是比较适合商品详情页,如果列表页呢?有多个商品需要推送呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396236

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX