我是戴长信,来自上海相物说。 我主要负责游戏客户端开发。
相物说是一个社区平台,每个人都可以以有趣且免费的方式互相赠送物品。 为了营造更好的社区氛围,我们决定通过小游戏来增加社区的趣味性和互动性。
《欢乐花园》是我们在小游戏领域的第一次实践。 这款游戏从立项到完成,我们一共花了3天的时间,或者准确的说,客户端完成了。
不过当时我们种花、浇花、接收水滴的任务都是通过浏览器缓存来实现的。 如果我们想上网,就得等待服务器人员就位。 不然玩家们把手机擦干净了,自己种的花就没有了。 但我们的服务器人员到位并启动游戏还需要几周的时间。
小游戏开发之痛:无法摆脱对服务器的依赖
相信这也是大多数小游戏在开发时都会遇到的问题——功能很简单,却无法摆脱对服务器的依赖。 如下所示:
具体来说,小游戏对服务器的依赖主要有以下两个方面:
1.微信接口仅支持服务器端调用
这意味着我们必须为这些接口设置一个中转服务器。 如果没有这个中继服务器,我们就无法登录用户、获取用户头像、姓名信息,也无法调用微信的其他接口,比如内容审核等。
2、游戏功能的实现需要服务器开发。
对于很多小游戏来说,我们使用服务器的唯一地方就是存储当前的关卡进度并显示世界排名。 当你想要实现这么一个简单的需求时,你会发现隔行如隔山。
如何利用云开发解决服务器端小游戏的痛点?
1.云函数实现微信接口调用
有一次,我想过绕过服务器,直接通过客户端请求微信接口,结果踩到了陷阱。
我们当时做的是聊天功能,需要对玩家发送的消息进行内容审核。 看完接口文档后,我跑过去告诉服务器同学,我做所有的内容审核就可以了,他不需要做任何额外的处理。
我们调整好之后上了试用版,打开报错信息的时候,我记得接口文档里有一行小字,而且颜色是灰色的,上面写着:这个接口应该在后面调用端服务器。
第一次看到这句话的时候,我以为这只是一个警告,所以根本没有放在心上。 谁知道竟然是一个! 在此之前,我还特意做了一些我认为更人性化的设计。 例如,使用该接口需要密钥。 该密钥有有效期。 当密钥过期时,我将发送玩家发送的内容。 保存,将新的密钥拉取到后端,然后发送出去,这样整个过程玩家是无法感知的。 但现在这意味着所有这些都必须由服务器来实现。
后来我通过云开发实现了多个接口调用,事情变得简单多了。
以登录为例。
由于云函数有微信的自然认证能力,可以直接返回,登录确实方便。乐香园需要将小红花点数据与香物说平台打通,所以需要用户信息。 这一步也是在云函数中实现的。
而且,那也是刚才使用的钥匙。 为什么我们需要单独讲这个关键呢? 因为它会用到云函数一个特别有趣的特性,就是定时触发器。 **由于这个密钥的有效期是两个小时,所以我们设置一个小时的时间间隔定期刷新它,保存到数据库中,使用时从数据库中取出即可。 这可以确保密钥永远不会过期。 的。
通过云端开发,不再需要为微信接口准备的传输服务器; 更重要的是,服务端与微信接口分离,无需关心客户端场景。 **无论客户端是h5游戏还是小游戏环境,对于服务器来说都是一样的。 无需为客户端提供这样那样的权限接口。
2.云功能+数据库实现全球排名功能
上文提到,小游戏开发对服务器的另一个依赖是游戏功能的实现。 对于大多数小游戏来说,我们使用服务器的唯一地方就是保存用户数据和显示世界排名。 如果你使用传统的服务器来实现这些功能,你会发现你需要了解很多后端架构知识。
有一次,我走到服务器端的一位同学旁边。 我原本打算diss他的,因为我已经写完了函数,他也不知道自己在忙什么。 这时,我看到了他在做什么——一边打开调试一边写文件和命令。 做完后,他给运维发了一封邮件,说需要执行几条语句。
而这一切,根本就没有触及他想要开发的游戏功能!
所以,从能够写出后端语言到能够放到生产环境中,是两个完全不同的概念。
云开发提供数据库、云函数、云存储。 通过这些能力,我们可以完全替代服务器来实现游戏功能。
在《畅享花园》中,我们通过云开发的方式实现了国语接龙的游戏功能,只用了2个云功能就实现了我们对服务器的全部需求。 下面简单介绍一下这两个云功能:
**第一个云功能用于显示世界排名。 **由于云函数从数据库拉取的条目有限制,所以最大为100条。其实这已经足够满足需求了; 当然,如果你要说我们的客户端很好,性能不是问题,就先给数据。 我发2000条消息也不是不可能。 我可以在这里处理它们。
另外,在检索数据库数据时,这个过程会非常慢。 一定要记住,后台添加数据库索引可以理解为用磁盘换CPU计算。 这会快得多。
**第二个云函数用于上报玩家数据。 **这个比较简单,一行代码就可以完成。
这样,从微信接口调用到游戏功能开发,一个不需要服务器的小游戏就已经完全开发出来了。
概括
事实上,云开发可以用于的业务场景有很多,比如: