写在前面
从2015年12月开始到2017年3月在一个创业团队完整参与了一个运动类的手机APP的开发,虽然最后这个项目失败了但是我学到了很多东西,现在已经过去一段时间了可能已经忘记了一部分细节的东西了但是希望通过博客的方式能把我那段时间学习到的东西记录下来,虽然还有整个项目开发过程中的一些波折,但是我还是主要想分享技术,接下来我想写的都是纯干货~
项目背景
运动页是一个体育类的手机APP,拥有IOS客户端,Andriod客户端以及微信H5界面,主要的功能有:创建运动、搜索运动、运动报名、运动浏览、关注、分享、IM聊天、评论留言、在线支付、账户充值等功能,是一个包含社交功能的运动APP,市场上类似的项目有很多,如中羽联、趣运动、球长部落、互动吧等。
项目初始
最开始该项目发起人找到我的时候我还是一名在校的研究生,刚开始给他做的是一个微信公众号的小项目,主要是实现一个简单的赛事报名功能,不过毕竟H5实现的功能不如APP的功能强大,所以在完成这个项目后没多久,老板(下文中简称BOSS)就找到我给我说了他的一个手机APP开发的想法,期间不断的交流他的想法(主要是在做需求分析),而我需要做的就是把BOSS的想法进行评估,然后做出Demo展示,最后在春节前夕定下来了,准备做这么一个APP,其实我对IOS开发是零基础的,只是在以前大学的时候做过andriod的一个项目,不会object-c,不过通过自己学习了一些IOS相关的知识后就开始搭建项目工程了。
运动页
整个项目前期开发只有我和我一个同学,他负责开发IOS客户端,我负责写业务逻辑(包括服务器后台API接口,和IOS上的业务代码),到后期整个项目增加到了5人,有专职的UI以及Android开发。
项目架构
整个项目包含IOS客户端、Andriod客户端、API接口服务器,为了加速项目的开发速度,对于一些需求,如果有比较成熟的方案的话我们都会使用,比如项目中的IM功能,使用了融云IM来实现,当前还有其他的一些特性的开发也使用了第三方的组件,主要有微信SDK、ping++、百度地图等。接下来主要介绍的是API接口服务器端中使用的技术:
- MySQL 数据库
- ActiveMQ 消息队列
- apidoc API接口文档生成
- ThinkPHP PHP框架
- xCache 缓存
- Nginx Web服务器
- workerman-statistics 分布式统计监控系统
ActiveMQ
Apache ActiveMQ是一个开源的消息队列,主要用于业务之间的解耦,例如用户注册后,向队列中发送一个任务,后台服务器进一步处理:申请融云用户Token值,下载用户授权的微信账号头像文件等,队列中的消息会被一个后台进行处理,每次处理的时候就直接从队列中获取一个任务按照如下流程进行处理
事件处理流程: