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

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

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

4805 次点击
所在节点    PHP
41 条回复
qiayue
2017-10-09 20:58:31 +08:00
用 nodejs 起一个 ws 服务,也就几十行代码
php 与 nodejs 可以用 http 通讯,也可以用 socket
spip232
2017-10-09 21:00:08 +08:00
@qiayue 好的,我了解去
singer
2017-10-09 21:01:31 +08:00
@spip232 都可以的,后端可以返回数组。比如说列表里有 1、2、3、4 四个商品,2 被秒杀完了。你主动推送 2 被秒杀完的请求。比如 array ("2"=>"0"){这个具体内容你自己定义,这是个例子},前端就用 js 解析这个请求就可以了。
dobelee
2017-10-09 21:34:59 +08:00
@spip232 列表的话,永远只 ajax 一个,不是每个商品都 ajax 分开的。
zjsxwc
2017-10-09 21:54:29 +08:00
用 ajax 轮询呗,要注意的是必须搞几个和业务无关的独立的服务器来专门处理这种 ajax 轮询请求,秒杀这种瞬间流量大的请求一多会把业务服务器搞卡出翔。
Immortal
2017-10-09 22:10:30 +08:00
@spip232
额,你的意思是你的秒杀是一个限时秒杀,在一定时间内被秒杀或者倒计时结束后没有被购买都算做结束?
这个要根据你列表的量级和同时秒杀数来看,我个人觉得就算是用 ajax 也不会有太大的问题,一请求到已经结束,当前这个 ajax 就不会再进行查询请求了,这个主要是要解决一个峰值的问题,不能让页面的所有用户同一时间全部进行查询,这个你自己考虑怎么解决,比如一定时间内的随机值.

建议你先进行下性能测试,ajax 完全能满足需求的话就直接 ajax,上 websocket 会多很多工作,比如其他同学说的另外开一个服务什么的,一旦多一个服务就要多保证一个服务的稳定,部署维护也是增加一定的负担,虽然代码没多少.如果 ajax 不能满足在走 websocket
spip232
2017-10-09 23:06:49 +08:00
@Immortal
“一请求到已经结束,当前这个 ajax 就不会再进行查询请求了”这个跟您说的一样,目前是使用 ajax,结束了不会在让其请求,现在的问题就是峰值不好控制
Moker
2017-10-09 23:20:00 +08:00
展示和提交的时候做好状态约定即可
spip232
2017-10-09 23:21:33 +08:00
@Moker 是列表页哦?您是只用 ajax 直接轮询吗?
Moker
2017-10-09 23:31:32 +08:00
@spip232 是的,这种方案是可以的,性能也还不错,简单,列表页的频率不需要那么频繁,点详情或者提交的时候再去查询一次,如果库存已经是 0,前端可以更新状态。
dangyuluo
2017-10-09 23:34:23 +08:00
如果你不想使用其他库比如 websocket 的话,我觉得 ajax 是一个比较好的方法。
Sapp
2017-10-09 23:47:47 +08:00
socket 推送消息,然后前端处理就行了
conn4575
2017-10-09 23:48:40 +08:00
秒杀不都是用队列吗?
spip232
2017-10-10 09:07:33 +08:00
@Moker 那就要用户主动点击才行了对吗?你是不是这个意思?我是需要及时不点击也要更新状态
Moker
2017-10-10 10:14:42 +08:00
@spip232 你可以定时请求啊
spip232
2017-10-10 10:44:42 +08:00
@Moker 我现在就是这么做,但很明显一轮询就感觉服务器反应压力大了
ZXCDFGTYU
2017-10-10 12:11:25 +08:00
别 socket 了,直接就是下单的时候再去查询商品状态,前端页面展示的时候,如果当时没有秒杀完则 js 倒计时,如果秒杀结束则页面显示秒杀结束
ZXCDFGTYU
2017-10-10 12:12:28 +08:00
这样做简单粗暴短平快,不然你单为了一个消息通知耗费太多没用的时间就太不值当的了
spip232
2017-10-10 12:44:29 +08:00
@ZXCDFGTYU 我现在需要解决的不是商品详情页哦,是商品列表页,有众多商品需要判断呢
rozbo
2017-10-10 18:16:25 +08:00
放队列一个个来

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

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

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

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

© 2021 V2EX