结合playframework与layui框架的高并发竞答系统的设计与实现
2020-11-20谢香艳
谢香艳
(广东顺德工业设计研究院/广东顺德创新设计研究院,广东 佛山 528300)
传统软件类APP通常需要注册并登录程序,而微信小程序作为近两年比较流行的软件开发平台[1-3],优点明显。首先,微信小程序只要赋予权限即可登录,不再需要复杂的注册与登录操作,其次,微信小程序是建立在微信平台的基础上,不需要额外下载软件,节省了手机内存,再次,微信用户量大,自带用户,不需要再额外推广,最后,其适应性高,不管安卓还是IOS系统,微信小程序都同样适用。因而微信小程序开发,受到越来越多的程序员们的欢迎与喜爱。
素质教育,一直是我国教育事业上的一个热门话题,其对象不单单是对于在校学生,更是针对全体人民。“学习强国”的推出,掀起了全民的学习热潮,其内容涵盖面广,深刻反映了习近平总书记的重要思想,全民学习,利用业余时间来提升自己,但是其中枯燥的答题[2],缺少吸引力,带动不了民众的热情。本文建立在微信小程序平台上设计了一款 “学习强国”的先导系统,并设计了一种奖励措施。额外的奖励将促进民众利用碎片化的时间,学习“学习强国”,更好地了解国家的政策方向。
1 系统总体设计
本系统主要有微信小程序端、服务器接口、数据库、后台管理系统四部分组成,系统结构图如图1所示。管理员在后台管理系统发布题目、奖项与游戏规则等信息,通过Scala语言与playframework框架相结合的方式,将后台数据存储到MySQL数据库。微信小程序端通过服务器接口,从数据库中获取后台发布的信息。小程序端主要分为竞答模块与抽奖模块,本文着重对这两个模块进行分析与设计。在开发该软件之前需要准备已经备案的专属域名以及SSL证书和云服务器。在本系统中采用的是阿里云服务器,通信方式采用的是http网络协议,本系统使用该协议前,需要在小程序客户端添加已经备案的域名。
图1 系统结构图
2 系统功能分析与实现
2.1 竞答模块
小程序每个用户都有唯一的openid与其对应,因而不需要注册程序,即可识别该用户,在用户填写姓名,电话号码等信息后,即可参与竞答,其竞答流程如图2所示,管理员提前设置题目选项与答案,用户每次随机获取10题,分为单选题8题,多选题2题,用户只需要答对其中8题即可获得抽奖码,否则需要重新答题。
图2 竞答流程图
服务器接口通过数据库获取题量代码,如表1所示。其中,Single_choice表示单选题,Multiple_choice 表示多选题,ans_question为题量数据库表,title表示题目标题,choselist表示选项列表,其格式为“[{"id":"表示选项编号","item":"对应选项的内容","isChose":"是否为正确选项"}]”,ctype表示题目类型,1表示单选,2表示多选。使用MySQL中的查找功能select函 数,从数据库表中随机选择并获取题量。
表1 ans_question数据库表
其前端通过获取到的Single_choice数组与Multiple_choice数组以后,需要先定义题目参数,答案数组,错题数组,正确题目数组以及用户选择的答案数组,现将题目进行遍历展示,每当用户选择答案列表以后,将答案列表与其正确答案对比,得出结论,并通过微信小程序自带的push函数压入答案数组中。从而统计正确题目个数。其答题页面及答题结果统计页面如图3所示。
图3 a—答题页面;b—答题结果统计页面。
2.2 抽奖模块
用户参与抽奖需要有抽奖码,抽奖码需要通过答题获取,用户在获取抽奖码以后,需要在规定时间内进行抽奖,规定时间需要后台进行添加与修改,在规定时间内抽奖的即有机会获得奖品,超出规定时间,该抽奖码作废,其抽奖流程如图4所示。
本次抽奖采用的是大转盘模式抽奖,分一到七等奖,最高奖项为100元手机话费,常用的抽奖分为放回抽奖和不放回抽奖[4-8],本次采用的是不放回抽奖模式,首先先定义ans_prize数据库表如表2所示,其中prize字段为奖项内容,level为奖项等级,prizenumber为该等级的奖项总数量,renumber表示剩余奖品数量,每次抽取该奖品,则该奖品数量相应减少,设剩余奖品总数量为sum=n1+n2+……+nn,则每次抽奖每个奖项对应的概率数组S为:
图4 抽奖流程图
随机抽取一个数index=Math,random()*a,a表示随机系数,随机系数根据总奖项的数量定义,当奖品数量越大,对应的随机系数越大。将取得的概率数组分别扩大a倍,得到一个新的数组区间:
再判断随机抽取数index属于[0~An]的对应的区间,该区间内可取得对应区间的奖品,同时根据大转盘的属性特征,一个圆为360度,本次抽奖为七个等级,对应分为七等份,则每份的区间分别为[0~51]、[52~103]、...、[309~360],取 其中心值得数组,判定随机抽奖数index所得的奖品之后,将转盘动画的指针定格至相对应的的大转盘中心值位置即可完成本轮抽奖。
其核心代码如下,其中prize为奖项信息,prob[]为每个奖项的概率:
表2 ans_prize数据库表
其抽奖结果与抽奖主页面如图5所示所示。
图5 抽奖结果与抽奖主页面
3 结论
本文详细介绍了高并发竞答抽奖系统各个模块的分析设计以及实现过程,用户填写信息以后进入答题程序,并获得抽奖码,在指定时间内完成抽奖,操作简单又有趣味性,用户也不需要下载额外的应用软件,打开微信即可使用。该系统对于增加全民的学习乐趣,提高民众对党思想的学习热情起到了很大的推动作用。