项目简介
前些天公司接到一个在线PK的项目,用户需求是模仿微信小程序的《头脑王者》,不过会比这个简单些,题目是公司内部拟定好的,都是关于疾病之类的比如糖尿病、心脏病等等。还有就是项目是在微信公众号上跳转到的WEB
页面,庆幸的是微信公众号开发我还是比较熟悉的,可怕的是用户强烈要求用C#
语言,运行环境是Windows Server 2008 、IIS8、SQL Server 2008
,用户数量在500
左右。好吧我承认我没有做过C#
开发,不过还能回忆起遥远的过去在学校学的一点点可能有用的知识,对我来说这是一个挑战,不过好在用户数量很少,这是他们公司内部员工用的软件,真实哔了狗了。
需求分析
根据和客户的对接内容,大概是想要一个前端程序和一个后台管理系统。基本功能为用户通过关注微信公众号之后可以点击链接进入到游戏中心。
其中前端主要包含以下四个模块:
- 王者训练场:用户平常练习的场所,每道题回答成功后会获得相应的分数。
- 全民PK:用户和用户之间PK的场所,里面包括实时PK和离线PK。
- 个人中心:可以查看自己的基本资料和得分情况。
- 排行榜:可以查看所有用户的排行情况以及自己的周排名和月排名。
后台主要包含以下四个模块:
- 题库管理:用户可以查看和编辑题库。
- 广告管理:所谓的广告就是用户在答题个过程中,在题目下发会显示一行文字广告。这里可以编辑广告内容。
- 用户管理:管理参与答题的用户和查看答题情况,并每月或者每周提取前20名进行线下奖励,所以这里需要进行按月或者按周排序。
- PK管理:查看用户的PK情况以及用户在PK过程中参与答题的情况。
根据以上描述大概整理了两个对应的脑图,我是业余的请忽略美观性:
基础设计
前端:好在客户提供微信端的设计图,
PSD
格式的文件。我们开发者自己来切图即可,这样我们就省去了UI
设计的时间,我们只是数据的搬运工。后台:后台只有一个管理员维护,对
UI
要求不高,方便操作即可,我想这是大部分管理后台的通用模式。开发环境:好吧,我只是
iOS
开发者,用的是MacPro
我尝试用Mac
版本的Visual Studio
,但是官方上面好像写的是测试版本;而且Mac
版本的主打.net core
,对.net MVC
并不友好而且对数据库之类的操作不太方便;最主要的是IIS
环境。好吧我放弃了Mac
版本。what the f**k
安装VMware ->Windows Server 2012->IIS8 ->Microsoft Visual Studio
,😓😓😓忙活了一下午甚至加了个班,创建个.net MVC
可以跑起来了。(我没用.net core
)的原因主要是客户那边有技术团队在维护微信公众号,用的是.net MVC
,我避免有坑,所有我也照旧了。数据库:此处省略。
开发
一名同事加入了,他负责微信端所有的页面,其余的后台和接口我来负责😭😭😭。
啪啪啪…
啪啪啪…
啪啪啪…
撞击声伴随着做出东西的快感…
此处省略500字…
一遍又一遍的调试,终于功夫不负有心人,两个周的时间搞定,内部测试通过用户测试没啥问题,接下来就是调整需求了😆😆😆😆(此处不讲了,甲方还是那个甲方)
接下来上效果:
后台:
.Net
前端:
难点
我认为此项目的难点在于PK模块,经过多方查阅资料,也没有找出个所以然来。于是我采取了WebSocket + Timer
的方式,这样对于500多用户的应该没什么问题。WebSocket
负责保持和用户通讯,Timer
每秒负责循环处理用户的数据。
1.首先创建enum PKUserStatus
用来表示用户的几种状态,这个枚举表示从用户链接成功到PK
结束的所有状态:
1 | public enum PKUserStatus |
2.创建User
类:基本的用户对象
1 | public class PKUser |
3.创建PKContext
类:类似于房间的概念,每个PKContext
表示一个PK
场次
1 | public class PKContext |
4.接下来的流程控制在控制器实现即可:
1 | public class WSChatController : ApiController |
结语
写到此处基本上算是对这个系统的核心部分搞明白了(请原谅具体实现没有写出来),至于别的接口、前端页面、数据库之类的就不叙述了,在简单不过了。
最后在吐槽一下这个pk的方案真的是太low了,不过现在跑这个系统基本上没什么问题。如果用户量比较大或者要求更高的话不建议自己写pk对战系统,最好使用商业的服务引擎,比如matchvs就不错哦!