不久前,GitHub上掀起了一场反对996运动,国内关于“996”工作制的讨论热度也在持续上升中。如何才能避免加班,在小程序开发中少走弯路?今天我们向大家推荐一个用云开发开发小游戏的方法,摆脱对服务器的依赖,提高开发效率。

转载来源:云开发x
原作者:代长新

前言

我是代长新,来自上海享物说,主要负责游戏客户端研发。《乐享花园》是我们在小游戏领域的第一个实践。这个游戏,从立项到做完,准确的说是客户端做完,我们一共用了3天的时间。

但是,当时我们种花浇花、领水滴任务都是通过浏览器缓存实现的,如果要上线还要等服务端人员到位,否则玩家清理一下手机,自己种的花就没了。但等我们服务端人员到位,再到游戏上线,就是几周以后的事情了。

小游戏开发之痛:无法摆脱对服务端的依赖

相信,这也是大部分小游戏开发时会遇到的问题 —— 功能很简单,但就是摆脱不了对服务端的依赖。如下图:

具体来说,小游戏对服务端的依赖主要有以下两个方面:

1、微信接口只支持在服务端调用

这就意味着,我们必须为这些接口架设一个中转服务器。如果没有这个中转服务器,我们就没法做用户登录,没法获取用户头像、名称信息,也拿不到access_token,更没有办法调用其他微信接口,如内容审查。

2、游戏功能实现需要服务器开发

对于很多小游戏来说,我们唯一用到服务端的地方就是,储存当前的关卡进度,展示一个世界排行,就可以了。而想要实现这么一个简单的需求时,你会发现,隔行如隔山。

如何用云开发解决小游戏在服务端痛点?

1、云函数实现微信接口调用

曾经,我想过绕开服务器,直接通过客户端请求微信接口,结果踩了一个坑。
当时做的是聊天功能,需要对玩家发送的消息进行内容审查。我看完了接口文档,就跑过去跟服务器同学说,内容审查我这边全部做掉就可以,他那边不需要做额外的处理。

等我们调通,上了体验版,一打开报错,我才想起来,这个接口文档的上面,有一行小字,而且颜色是灰色的,上面写着:此接口应在后端服务器调用。

第一次看到这句话,还以为它只不过是一个警告,所以根本没把它放在心上,哪知道它居然是一个error!而在这之前,我还特意做了一些我认为比较人性化的设计,比如使用这个接口需要一个密钥,这个密钥是有有效期的,当密钥过期的时候,我会把玩家发送的内容保存起来,向后端拉取新的密钥后,再发送出去,这样对于玩家来说,整个过程是无感知的。而现在则意味着所有这些都要服务器去实现了。

后来,我通过云开发来实现多有接口调用,事情就简单多了。

就拿登录来说吧。

由于云函数具有微信天然鉴权的能力,可以直接返回openid,这一点对做登录确实很方便。乐享花园需要和享物说平台打通小红花积分数据,所以需要用户的unionid信息,这一步也是在云函数中实现的。

还有access_token,就是刚才用到的密钥,为什么要单独说这个密钥呢?因为它会用到云函数特别有意思的功能,那就是定时触发器。由于这个密钥是有两个小时有效期的,我们设定一个小时间隔定时刷新,保存到数据库中,用的时候直接从数据库中取出来就可以了,这样可以保证密钥永远是不过期的。

通过云开发,为微信接口准备的中转服务器就不需要了;更重要的是,服务端与微信接口分离,无需关心客户端场景。不管这个客户端,是来自h5游戏,还是来自小游戏环境,对于服务端来说,都是一样的,再也不需要为客户端提供这样那样的权限接口。

2、云函数+数据库,实现全局排行榜功能

正如前面提到的痛点,小游戏开发对服务端的另一个依赖是游戏功能的实现。对于大部分小游戏来说,我们唯一用到服务端的地方就是:保存用户数据,展示一个世界排行榜。而如果用传统服务器实现这些功能的话,你会发现需要了解的后端架构知识非常庞大。

有次,我到服务端同学的旁边,原本是打算diss他的,因为我功能已经写完了,他还不知道在忙些什么东西。这时我看到他在做什么呢 —— 一边写dockfile文件,一边写linux命令,一边打开Postman调试,完了后发邮件给运维说要执行几个mysql语句。
而所有这些都还没有涉及到他要开发的游戏功能!

所以说,一门后端语言从会写,到可以放到生产环境中,是两个完全不一样的概念。

云开发提供了数据库、云函数、云存储,通过这些能力,我们完全可以取代服务器来实现游戏功能。

在《乐享花园》里,我们通过云开发实现了全民成语接龙这个游戏功能,并且只用了2个云函数就实现了我们对服务器的全部需求。这里简单介绍一下这两个云函数:

第一个云函数是用来展示世界排行榜。由于云函数拉取数据库的条目是有限制的,最大是100条,其实这个已经足够满足需求了;当然了,你要说我们的客户端很牛,性能不是问题,数据什么的先给我来个2000条,也不是不可以,这里做个处理就可以了。

另外在检索数据库数据时,这个过程会很慢,一定要记得,在后台添加数据库索引,可以把这个过程理解为通过磁盘换取CPU计算。这样速度会快很多。


第二个云函数是用来上报玩家数据。这个比较简单,一行代码搞定。

就这样从微信接口调用,到游戏功能开发,一款不需要服务器的小游戏就全部开发完成了。

小结

其实,云开发可以使用的业务场景,还有很多,比如,

绕过微信https域名请求限制
存放游戏的全局设置
保存玩家的个性化数据
。。。

作为开发者,也希望云开发未来,可以提供更多的业务场景支持,比如,

websocket,刚才说的聊天服务器,就可以省掉了;
帧同步,实时对战类游戏的实现,就不再有压力;
日志服务,方便统计,和排查玩家的行为,方便游戏迭代优化;大数据统计分析,可以做一些事件漏斗等等~

这样小游戏的研发门槛,就降得很低很低了!

码code | 拒绝996,不用服务器也能高效开发小游戏相关推荐

  1. 微信小程序案例源码-cocos creator跨平台开发小游戏案例

    前言 本人一直想学习游戏开发,以前做过Android游戏开发,但电脑坏了,所有源码都没有了,后面也就没有开发了,近来下班之余又想开发游戏了.开发游戏之前,需要考虑开发平台及语言,以前基于Android ...

  2. 我的世界服务器组队系统,我的世界小游戏服务器组队指令 | 手游网游页游攻略大全...

    发布时间:2017-10-25 我的世界小绿蛇头颅指令是什么?小绿蛇头颅怎么得?小绿蛇头颅有什么用? 小绿蛇 /give @p skull 1 3 {display:{Name:"Yoshi ...

  3. (十四)nodejs循序渐进-高性能游戏服务器框架pomelo之开发Treasures游戏

    #Tutorial 2 -- Treasures ##描述 Treasures 游戏是从 LordOfPomelo 中抽取出来,去掉了大量的游戏逻辑,用以更好的展示 Pomelo 框架的用法以及运作机 ...

  4. html5小游戏源码_[源码和报告分享]基于HTML5实现的贪吃蛇小游戏

    1 游戏介绍 贪吃蛇的经典玩法有两种: 积分闯关 一吃到底 第一种是笔者小时候在掌上游戏机最先体验到的(不小心暴露了年龄),具体玩法是蛇吃完一定数量的食物后就通关,通关后速度会加快:第二种是诺基亚在1 ...

  5. [源码和报告分享]基于HTML5实现的一笔画小游戏

    1 游戏介绍 一笔画是图论中一个著名的问题,它起源于柯尼斯堡七桥问题.数学家欧拉在他1736年发表的论文<柯尼斯堡的七桥>中不仅解决了七桥问题,也提出了一笔画定理,顺带解决了一笔画问题.用 ...

  6. [源码和文档分享]基于HTML5实现的一笔画小游戏

    1 游戏介绍 一笔画是图论中一个著名的问题,它起源于柯尼斯堡七桥问题.数学家欧拉在他1736年发表的论文<柯尼斯堡的七桥>中不仅解决了七桥问题,也提出了一笔画定理,顺带解决了一笔画问题.用 ...

  7. [源码和文档分享]基于HTML5实现的消灭星星小游戏

    笔者这次又是使用了 MVC 模式来写「消灭星星」.星星「砖块」的数据结构与各种状态由 Model 实现,游戏的核心在 Model 中完成:View 映射 Model 的变化并做出对应的行为,它的任务主 ...

  8. 微信小程序合集源码I(机器人聊天+仿别踩白块儿小游戏+仿步步高电子词典+仿知乎+日记+汉字拼音+转盘抽奖)

  9. 拇指射箭服务器维护,拇指射箭1小游戏:这个拇指射箭3D游戏有点意思,拇指枪王对决...

    原标题:拇指射箭1小游戏:这个拇指射箭3D游戏有点意思,拇指枪王对决 40000+游戏爱好者已加入我们! 每天推荐好玩游戏! 加入我们,沐沐带你发现好游戏! <拇指射箭>游戏小程序好玩吗? ...

  10. 【听说有人想转码】大炮打蚊子----用二维数组写小游戏

    上题目 大炮打蚊子 (5 分) 现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格.向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意: O OXOO 其中,X为炮弹落点中 ...

最新文章

  1. 商品的包装(外贸知识二)
  2. 网站自动登录功能的设计
  3. 最长公共子字符串(动态规划)
  4. TypeError: Object of type ‘datetime‘ is not JSON serializable
  5. android gridview滚动条位置,Android GridView滚动到指定位置
  6. 在windows下编译d-nets
  7. 双向链表基本实现简单贪吃蛇
  8. .NET 4 实践 - 使用dynamic 和MEF实现轻量级的 AOP 组件 (1)
  9. DEDE织梦标签名称:{/dede:arclist} 详解
  10. 153.寻找旋转排序数组中的最小值(力扣leetcode) 博主可答疑该问题
  11. 精读Tree Energy Loss: Towards Sparsely Annotated Semantic Segmentation
  12. 无干扰网络收音机:Radium for Mac
  13. 【机器学习】补完计划
  14. SolveigMM Video Splitter绿色中文版
  15. 首马破四-IT男的健康分享
  16. 用Java代码计算磁盘里的文件大小
  17. 一般信道容量的计算matlab,DMC信道容量迭代计算的matlab实现
  18. 你的网站为什么被黑?
  19. 艾乐云后台伪装404恶搞页,后台恶搞伪装单页
  20. 飞行棋小游戏 C#编程记录

热门文章

  1. python画一棵树的心理测试,【心理测试】画树测试:一棵树读你的人生
  2. 美团实习生电面之谈(成功拿到offer)
  3. linux 内网ip扫描工具,C#开发:局域网IP地址扫描小工具
  4. 史上最详细的PID教程——理解PID原理及优化算法
  5. 有道云笔记·协作android版,【每天一品】有道云笔记协作
  6. HTTP代理服务器的实现
  7. 网易邮箱好用还是TOM邮箱好用?企业邮箱可绑定微信吗?
  8. python中幂运算_python 计算幂
  9. linux有类似酷狗qq音乐软件,除了网易云QQ音乐,这些小众音乐APP同样值得推荐。...
  10. java计算机毕业设计景区门票系统源码+数据库+系统+lw文档+mybatis+运行部署