自动发红包啦

2021-02-23 14:15:21 +08:00
 nobuger

最近接了一个比较老的系统,营销系统使用的,主要是用来活动现场发红包。

现在有个需求,活动现场,主持人在台上点击发红包按钮,台下进入小程序(公众号)的签到用户在小程序(公众号)界面会自动弹出红包,用户点击领取。

感觉这个功能有点像博客的消息提醒或者实时变化的未读邮件数,初步的想法是用户页面不停地发接口查询状态,状态改变后就出现红包,但是感觉不是很好的方法。

想请教下应该怎么实现。感谢!

框架用的 spring MVC 。

2674 次点击
所在节点    程序员
22 条回复
gy134340
2021-02-23 14:19:57 +08:00
免费要技术方案?
nobuger
2021-02-23 14:22:39 +08:00
@gy134340 啊这?请教个问题而已
mokeyjay
2021-02-23 14:24:44 +08:00
轮询就已经是很好的方法了
mauve
2021-02-23 14:26:22 +08:00
websocket
nobuger
2021-02-23 14:27:35 +08:00
@mokeyjay 服务器负担会不会有点重了
Kasumi20
2021-02-23 14:27:53 +08:00
websocket
nobuger
2021-02-23 14:29:12 +08:00
@mauve 谢谢 我学习下
nobuger
2021-02-23 14:29:19 +08:00
@Kasumi20 谢谢
mokeyjay
2021-02-23 14:33:33 +08:00
@nobuger #5 我记得 websocket 是比轮询更占资源的,尤其是连接数多了之后
Amayadream
2021-02-23 14:37:22 +08:00
进入页面时主动查询 + 定时轮询查询即可,这种需求使用轻量级的解决方案即可,没必要引入复杂度。
litchinn
2021-02-23 15:49:55 +08:00
觉得轮询 low 的话用 rabbitmq 吧
keepeye
2021-02-23 15:53:38 +08:00
现场多少人?算好轮询请求间隔时间,区区并发,问题应该不大吧?
zjsxwc
2021-02-23 16:00:55 +08:00
2000 人抢红包,带宽要买大点的。
保守点 1 一个请求 2KByte,1 秒内 2000 个请求就是 4MByte,也就是 32M 带宽了。
markgor
2021-02-23 16:14:05 +08:00
是不是想复杂了呢....
主持人在台上点击发红包按钮->小程序(公众号)界面会自动弹出红包,用户点击领取。
精简下流程...

用户签到(小程序 /公众号)->记录 openID |这一步没多大并发和流量
主持人点发红包->后台接收请求|根据几率随机取出数据,调用微信红包 api,发送红包;没中的可以发送安慰通知。


这样流量并发问题就可以甩手微信了。
imdong
2021-02-23 16:21:51 +08:00
14 楼优化版本

用户签到记录下来后,主持人点击发红包时,就直接将用户分为可中奖用户和未中奖用户,并且更新 CDN 静态文件为开奖中(或中奖用户列表)。

客户端签到后,进入小程序轮训位于 CDN 的静态文件,记得加时间戳来过缓存,变更后客户端按钮更新。

至于抽奖过程,用户点击后决定,还是根据列表直接给假动画,都可以。
Tokin
2021-02-23 16:21:57 +08:00
@mokeyjay websocket 比轮询省资源。。。
数据量大的时候 websocket 倾向于需要更大地内存,轮询则需要更强的 CPU+内存
不过轮询实现简单。
nobuger
2021-02-23 16:38:42 +08:00
@markgor
@imdong 谢谢。其实我说的比较简略了,不只是开始发红包,活动中会发好几次,项目经理要求一定要领,显示红包界面才行
BarryAllen
2021-02-23 17:31:04 +08:00
商量一个具体时间 等到规定时间假装点一下按钮 舌战去吧
markgor
2021-02-23 17:59:35 +08:00
@nobuger
你还没理解我的意思。
建议你可以看看微信商户平台-微信红包 API

你只需要
1 、签到->记录用户的 OPENID ;
2 、然后主持人点开始->后端随机获取中奖的 OPENID->调用微信红包 API ;

用户侧的体验是:
中奖用户:公众号会下发一个红包,点击打开后的效果和你平时发红包给别人的效果一致。
未中奖:可以适当发送“xxxx,再接再厉”


这样你只需要完成 3 个功能,1 个界面即可了。
markgor
2021-02-23 18:11:11 +08:00
另外,你确定你用小程序做个红包界面,审核能通过?
还是说你打算用隐藏大法来通审?被举报 /发现是直接封主体喔....


搞个活动无非就是为了 吸粉 /打品牌 /增加现场活跃
1 、如果你是要吸粉,签到已经吸粉了,没必要要求用户一直打开 H5 或小程序。
2 、如果你是要搞小程序使用量,签到的时候不就已经搞到使用人数了吗。
3 、打品牌 /加活跃,客户从不关心有多少是你自己做的,只关心用起来爽不爽有没中奖。
所以上述方案基本能用最少的资源去薅微信的处理能力羊毛。


上面方案唯一耗时的就是 从签到处随机取出 中奖者的 OPENID,这部分用 redis 随机取出即可了。
然后网络 /IO 消耗的部分就是 发送 openID 到微信红包的 API,java 我不清楚,你中奖数量我也不清楚,可以考虑异步发送过去微信红包 API 。如返回取关 /红包发送失败(未实名)之类的错误,重新在 redis 上随个出来补上就行了。

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

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

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

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

© 2021 V2EX