V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nobuger
V2EX  ›  程序员

自动发红包啦

  •  
  •   nobuger · 2021-02-23 14:15:21 +08:00 · 2642 次点击
    这是一个创建于 1364 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    框架用的 spring MVC 。

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

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


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

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

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

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

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

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


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


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


    上面方案唯一耗时的就是 从签到处随机取出 中奖者的 OPENID,这部分用 redis 随机取出即可了。
    然后网络 /IO 消耗的部分就是 发送 openID 到微信红包的 API,java 我不清楚,你中奖数量我也不清楚,可以考虑异步发送过去微信红包 API 。如返回取关 /红包发送失败(未实名)之类的错误,重新在 redis 上随个出来补上就行了。
    ajaxfunction
        21
    ajaxfunction  
       2021-02-23 22:44:10 +08:00
    用 websocket 就是纸上谈兵,理论没问题,实际坑死。
    活动现场人数很多,无论是 wifi 或 4g 网络抖动都很严重,websocket 是长连接应用,一旦短线务必重连,又的走一遍权限认证,各种校验流程,负载不比轮询低
    轮询呢这次请求错误,那就继续请求呗,session 和 cookie 又不会丢。

    redis 里放一个活动状态,默认是关,主持人点了发送,活动状态改成开
    你觉得不好的方法,反而是最优的设计,只不过在 UI 界面上可以用障眼法来降低负载,比如滑动拖动点击元素来进入活动增加趣味性也避免并发

    这种现场实时系统,简单稳定是最重要的,否则就是事故,轻则挨批,重则砸场子。
    vindurriel
        22
    vindurriel  
       2021-02-24 06:03:12 +08:00 via iPhone
    最小成本且最受信任的解决方案是 登录鉴权后展示群二维码 进群 管理员在群里发包
    如果自己做抽奖 即使费劲解决了并发的问题 所有没中的人都会怀疑有黑幕
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:31 · PVG 12:31 · LAX 20:31 · JFK 23:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.