后端小白做网游开发心得分享

2017-12-05 11:56:59 +08:00
 LeanCloud

[ 玩转 LeanCloud ] 开发者投稿分享:

作者:赵天泽

作为一个通过 LeanCloud 入门后端开发的小白,一年多的开发历程让我收获满满。多个项目也在 LeanCloud 可靠的服务支撑下取得了不错的发展,其中用户量最大的项目的云引擎每分钟请求量在 1.2W 次左右,每日调用存储服务 API 在 300W+ 次。在此过程中,我不仅得到了 LeanCloud 各路技术大侠的指点,得以提高数据可靠性并优化了逻辑执行效率,而且 LeanCloud 的高可用性和对突发异常处理的高效也让我对运维工作和服务稳定性没有丝毫的顾虑;再加上简洁好用、响应及时的工单系统,可以这么说,我的工作由此变得美好惬意。

海外节点+高效技术支持

其实使用 LeanCloud 之前,我一直在做 iOS 应用和手游客户端开发,没有半点后端开发的经验,也未曾碰过 JavaScript,直到后来参与过几款网游的开发,才对游戏后端大概的架构和接口设计有所了解。接着我们的项目需要为单机游戏增加网络存档和每日任务分发功能,可我们一位后端程序员也没有,而且也不具备从头搭建和部署一套可靠的后台服务的能力,所以可行的方案就是找到一套现成的第三方服务。当时国内国外也有不少的后端服务提供商,最终敲定 LeanCloud 主要是考虑到:

成熟稳定的海外节点和配套服务。我们的游戏主要是在海外推广,虽然海外有不少专门针对游戏的后端云服务,但是实际使用下来发现它们的开发自由度并不高,达不到我们的标准。

与技术支持人员的沟通效率。大多的海外服务商只能通过邮件或者论坛沟通,效率十分低下,真要是遇到了问题迟迟不能解决就会非常麻烦。而 LeanCloud 技术支持的响应非常之快,即使最初大家只在 QQ 群里沟通还没有使用工单系统,所有回复都不拖沓,使用者当然高兴啦。

清晰详实的技术文档。分类比较清晰,非常适合入门学习。

另外,我们还特地调研了 LeanCloud 的云引擎服务,因为其提供完整简便的后台部署途径和工具,实现线上环境的一键部署,又能让我们基于 express 任性地开发后台逻辑,所以我们确信选择是非常正确的。

REST API + 云函数是万金油

为实现用户游戏数据存储和每日任务分发,我们最先用了存储服务和云引擎。不过我们并没有用 LeanCloud 提供的 SDK 来直接调用存储服务,而是选择用 LeanCloud REST API 调用云引擎里面的云函数,然后通过云函数调用存储服务来实现相应的逻辑。这样做的原因是我们的游戏主要是使用 lua + C++ 开发,LeanCloud 的 C++ SDK 没有持续维护,使用起来会有潜在风险;而如果使用 iOS 和 Android SDK,又得把需要使用的接口暴露给脚本层,这就多了一道不必要的程序。基于以往开发网游的经验,我们更倾向于按功能模块向前端提供相关的 API,让前端通过 HTTP 协议将数据 post 给服务器,服务器处理完后返回前端需要更新的那部分数据就好。

实践下来我们发现这样做的确有优势,把数据查询、处理和存储的逻辑放在后端进行,这样业务的调整可以变得非常灵活。比如在用户量起来之后,发现每日任务表会有大量的读写操作,根据 LeanCloud 技术支持的建议,我们将一些热数据放到云引擎的缓存服务 LeanCache 中使用,也就是先去缓存里面查数据,没有的话再去存储服务里面查,这样就有效地降低了查询的时间,提高了业务处理的效率,而前端代码啥都不用变。

云缓存速度快得没商量

要单独说一下云缓存 LeanCache。它实质上就是 Redis,对于改善和提升我们项目性能功不可没。当初我们需要做一个全区排行榜,正好 LeanCache 的官方 Demo 中提供了排行榜的示例代码(帮我补上了什么是原子性这一课,必须膜拜),于是我们在此基础上实现了自己的排行榜功能,并把它放在 npm 上方便大家取用「 leaderboard-promise 」。接着我们还陆续在云缓存中实现了热数据缓存、订单系统、token 验证系统等等功能,充分去利用 Redis 的优势来解决业务中可能引起性能瓶颈的情况。

跨时区定时推送通知

我们的用户来自全球各地,有不同的时区,我们需要让所有用户在当地时间的下午 7 点收到一条通知。通过云引擎和消息推送服务,我们只需要在每个 installation 对象下新增一个用户的时区数据,然后在云引擎中设置一个每个整点触发的定时任务,当任务触发时在推送条件里面设置对应的时区信息,这样就达到了我们的目的。另外通过云引擎实现向特定用户群推送也非常方便。

实时对战玩法 500 行代码搞定

最近我们的新项目希望能够尽快实现可靠的房间制实时对战玩法,以便能够快速投放到市场去验证玩法是否受到玩家欢迎。如果在用户认可之前就耗时耗力去开发一套实时对战框架显然不太明智。于是我们向 LeanCloud 求助,竟然很快地得到了一套基于实时通信模块的开发建议,这样通过云引擎搭配实时通信模块,用了不到 500 行代码就把一套房间匹配制的实时对战框架搭建完毕,后续只需要集合项目中游戏的实际玩法就可以很快部署上线了。原以为要洪荒之力,却只费了吹灰之力,幸福感那是瞬间爆棚。

技术课程直播完善

LeanCloud 一直坚持在做的直播课程系列。所有课程不仅涉及到了 LeanCloud 各个功能的基本使用介绍,还讲解了后端开发中常常需要去面对的问题,像如何对压力评估和优化、如何设计业务流程来保证数据的一致性、如何通过权限控制保障数据的安全。这些内容对于即使不使用 LeanCloud 服务的后端开发人员都是十分有用的。

最后,我想把 LeanCloud 推荐给两类人:

想学习后端开发,但是却被复杂的云服务器采购、架设和配置吓住的同学。LeanCloud 有非常高效的开发配套工具,可以快速在本地和云端实现需要的业务逻辑。看着自己的项目上线运转起来的成就感一定会激励你继续深入的学习,以 LeanCloud 为起点,慢慢的完善的后端开发知识体系。

另外一种就是虽然有足够的后端开发经验、但目前着手于初创项目并没有完善的运维团队支持的同学。众所周知,要建立起一套完善的运维保障体系是一件需要投入不少资源的事情,初创项目应该把更多的精力投入到实际的业务逻辑开发上面,运维这样的麻烦事儿就完全可以交给后端服务商吧。

2785 次点击
所在节点    程序员
7 条回复
bramblex
2017-12-05 12:11:17 +08:00
实时对战 500 行……这想的太美了……

为了实时,我们连 linux 都是打补丁的,网络层还是自实现的 kcp。才解决了复杂网络环境下的低延迟,尤其是 4G 环境下丢包很高,然而我们依然能保持很低的延迟。
misaka19000
2017-12-05 12:17:36 +08:00
咋感觉没啥干货啊
AsisA
2017-12-05 12:21:38 +08:00
广告应该发到推广节点的吧
Rice
2017-12-05 12:31:50 +08:00
没有干货
shuizhengqi
2017-12-05 14:04:36 +08:00
又是一次广告,直接 block
moxiaonai
2017-12-05 15:22:04 +08:00
这广告打的太明显了吧
YMB
2017-12-05 15:38:04 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/412104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX