20190127晚的万人年会结束了,开发的抽奖系统顺利完成,不过还有一些问题可以改进,对此次项目做个总结.
一、项目简介
1.流程:活动现场放置二维码,当天参见年会人员使用微信扫码领取二维码,领取抽奖券;抽奖时在大屏上投放抽奖节目,3D特效成长抽奖动画,根据需要抽取一次获奖的具体人数;
2.需求:
a.微信扫码,获取客户微信信息,没有关注公众号的关注公众号,关注的根据微信号对应公众号的唯一openid发放定义的抽奖券;
b.抽奖特效使用3D动态头像流,根据需要抽取相对的奖项和人数;
c.中奖后公众号发送通知给中奖人;
3.开发环境:SSM、jdk1.8、tomcat8、微信公众号开发接口;
4.部署环境:阿里云服务器;
5.实际现场参与人数4100人;
6.前端主要效果:
a.提示关注公众号
b.抽奖券页面:
c.抽奖大屏页面:
d.抽奖 3D特效
总结:
1.会场没有网络,使用手机热点,考虑到人数较多,信号可能会不好,准备了第二套方案将数据库抽奖券信息导入电脑中,下载所有客户头像进入本地,使用本地的项目环境运行项目,不再请求网络资源;
但是因为现场节目调整,没有足够的时间更新本地的信息,还是使用的原方案,根据生成人数的不同导致体验上会有2-10秒卡顿后才会进入3D动画;
解决方案;使用前端双线程解决,一个线程执行3D动画,一个线程在后台执行生成中奖人信息;(js线程使用:Worker)
2.使用两个服务器器对请求进行分流,各请求在使用秘钥时向同一个线程获取秘钥,秘钥为该线程的静态变量,该线程2小时更新一次秘钥,现场使用的时候偶尔还会出现获取秘钥失败的情况,概率1%左右;多请求多线程同时获取秘钥有时候会失败;原因怀疑两个方向:1.秘钥被多线程调用的时候有一定的失败率,2.秘钥传输有问题;3.向微信服务器严重秘钥的时候有容错率;解决方法待更新;