Serverless 架构从概念上来说,是一种让开发人员专注于应用开发,而不必关心服务器基础架构的方式。在 Serverless 应用中,我们只需要关注代码实现,而无需关心服务器维护和管理,同时在需要进行扩展时也非常方便。
本文将讲解如何通过 Serverless 应用构建一个分布式卡牌游戏,希望能够提供深度指导和学习意义。
分布式卡牌游戏概述
我们将开发一个简单的多人在线卡牌游戏,允许多个玩家在同一时间内参与游戏并进行卡牌对战。
我们采用前后端分离的方式进行开发,使用 Vue.js 作为前端框架、Node.js 作为后端服务。在后端服务中,我们采用 Serverless 架构,使用云服务提供商提供的各种 Serverless 服务,包括函数计算、API 网关、存储服务等。
主要的服务器组成架构如下所示:
Serverless 架构设计
架构选型
在开发分布式卡牌游戏的 Serverless 应用中,我们需要选择一种云服务提供商作为后端服务的支撑,这里我们选择了腾讯云。
腾讯云提供了非常完善的 Serverless 架构支持,包括函数计算服务、API 网关、消息队列等。这些服务不仅性能优秀且易于使用,还提供了开箱即用的部署和运维方式,极大的方便了开发人员。
功能划分
在本项目中,我们将整个应用分成了三个部分:用户系统、卡牌系统和游戏系统。这三个子系统将分别使用不同的 Serverless 服务部署,相互之间独立运作。
用户系统包括用户注册、登录、退出等基本功能,采用了腾讯云提供的云数据库 COS 和对象存储 CODB 作为后台服务。
卡牌系统用于管理卡牌的信息,包括名称、属性、效果等。我们将采用开源的云数据库 MongoDB 作为服务支撑,同时继承了用户系统的 COS 和 CODB。
游戏系统则是本项目的核心模块,包括匹配玩家、创建房间、进行卡牌对战等功能。我们将使用腾讯云提供的函数计算和 API 网关来构建这一部分。
数据库设计
在使用 Serverless 架构时,数据存储服务也是十分重要的,因此我们需要对数据库进行合理的设计和规划。
我们将采用 MongoDB 作为数据库服务,其中用户信息、卡牌信息和游戏房间信息分别存储在不同的集合中,这样做有利于在后期的维护和扩展。
用户信息集合设计如下所示:
{ "_id": ObjectId("59bde81377bfbff24b2d1edd"), "user_name": "xiaohe", "password": "VdXQnC08S+NsbGUHseyp11THvo/rzwLEfAD+Eezs30s=", "register_time": NumberLong("1505552129028"), "create_time": NumberLong("1505552129028") }
卡牌信息集合设计如下所示:
{ "_id": ObjectId("59bde81377bfbff24b2d1edd"), "name": "红色杀手", "attribute": "地", "effect": "使对象的另一方失去500点LP", "image_url": "http://xxxxxx.jpg", "create_time": NumberLong("1505552129028") }
游戏房间信息集合设计如下所示:
-- -------------------- ---- ------- - ------ ------------------------------------- ------------ ------- ----------------------- -- ------------------- -- ---------- -- ---------- ------------------------------------- ------------ --------- ----------- - --- --------- -- -------- -- -------------- ---------------------------- -------------- --------------------------- -
代码实现
用户系统
我们先来看一下用户系统的代码实现。
首先,我们需要安装腾讯云提供的 SDK 工具包,安装命令如下所示:
npm install --save cos-nodejs-sdk-v5
然后是用户注册功能的实现,代码如下所示:
-- -------------------- ---- ------- ----- --- - ---------------------------- --- --- - --- ----- ------ --------- --------- --------- ---------- --------- ------- ------------------------ -- ---------------- - ----- -------- ------- -------- - --- -------- - ------------------------------------ --- -------- - ------------------------------------ --- ---- - ----- --------- ------- ------------ ------- ----------- ---- -------- - -------- - ------- -- -- ----- --- ---------- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ----- ------- -------- -- - - ----- --------- ------- ------------ ------- ----------- ----- ---------------- --------- --------- --------- ----------------- -------------- ----------- ------------ ---------- --- ---- -------- - -------- - ------- -- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - -------- ------ ----- - --- ------ - --------------------------- ------------------ ------ -------------------- -
卡牌系统
卡牌系统与用户系统类似,也是使用云数据库 MongoDB 作为服务支撑。我们需要使用 Node.js 的 Mongoose 模块来进行数据库的管理和查询操作。其中,具体的增删改查操作代码如下所示:
-- -------------------- ---- ------- ----- -------- - ------------------- ----- ------ - --------------- ----- ---------- - --- -------- -------- ------- ----- ------- ---------- ------- ------- ------- ---------- ------- ------------ - ----- ----- -------- -------- -- ------------ - ----- ----- -------- -------- - -- ----- ---- - ---------------------- ----------- ----------- - ----- -------- ------- -------- - --- ---- - --- ------ -------- --------- ----- ------- ---------- ---- ------- ------------------ ---------- ------------------- -- ----- ----------- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - -------------- - ----- -------- ------- -------- - --- ---- - ----- -------------- -------- -------- -- --------- - ------- ----- ----------- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - -------------- - ----- -------- ------- -------- - ----- ---------------- -------- -------- -- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - ------------- - ----- -------- ------- -------- - --- ----- - ----- ------------------------------ ------ - ----------- ---- ----- ---------------- ----- -- ----- ----- -- - -
游戏系统
游戏系统是本项目的核心部分,相较于用户系统和卡牌系统,它包含了更多的业务逻辑。
我们使用函数计算来实现游戏系统,同时采用 API 网关调用函数计算的形式,将接口暴露给前端调用。以下是主要的代码实现:
-- -------------------- ---- ------- ------------------ - ----- -------- ------- -------- - --- -------- - ---------------------- --- -------------- - ---------------------------- --- ------ - -------------------- --- ---- - ----- -------------- --------- -------- -- -- ----- --- ----- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ----- ------- -------- -- - - --- ---------------- - ----- -------------- -- ----------------- - --------------- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ------- ------- ---- ------- -- - - ---- - --- ------ --------- --------- --------------- --------------- ------------------- -- -------- --------- ------- -- ------ -- ----------- ----------- ----------- ---------- -- ----- ----------- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - ---------------- - ----- -------- ------- -------- - --- ------ - -------------------- --- ------ - -------------------- --- ---- - ----- -------------- ---- ------ -- -- ----- --- ----- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ----- ---- --- ------- -- - - --- ------------------ - ----------------------- --- -------------- - ------------------- -- ------------------- -- --------------- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ----- -- ------ -- - - ------------------------- ----------------------- - ------------------- --------------- - ---------- ----- ----------- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - ----------------- - ----- -------- ------- -------- - --- ------ - -------------------- --- ------ - -------------------- --- ---- - ----- -------------- ---- ------ -- -- ----- --- ----- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ----- ---- --- ------- -- - - --- ------- - --------------------- -- ----- --- ----------- ------------ - ------- ----------------------- - ------------------- --------------- - ---------- --- ------------------ - ----------------------- -- ------------------- --- -- - ----------- - - --------------- - ---------- - ----- ----------- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - ----------------- - ----- -------- ------- -------- - --- ------ - -------------------- --- ---- - ----- -------------- ---- ------ -- -- ----- --- ----- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ----- ---- --- ------- -- - - -- ------------------------ - -- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ---- ------ ------- -- --- ------ -- - - ----------- - - --------------- - ---------- ----- ----------- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - - ------------------ - ----- -------- ------- -------- - --- ------ - -------------------- --- ---- - ----- -------------- ---- ------ -- -- ----- --- ----- - ------ - ----------- ---- ----- ---------------- ----- ----- -------- ----- ---- --- ------- -- - - ----------- - - --------------- - ---------- ----- ----------- ------ - ----------- ---- ----- ---------------- ----- -- -------- --------- -- - -
总结
通过本文,我们学习了如何使用 Serverless 架构来构建一个分布式卡牌游戏,在此过程中,我们涉及了云服务提供商的选型、数据库的设计和实现以及函数计算和 API 网关的使用等多个方面。
Serverless 架构可以极大地简化云应用的开发和维护,提高了开发人员的效率,同时还具有较高的性能和可维护性。因此,对于那些需要快速构建高性能、低成本并且易于维护的云应用来说,Serverless 架构是一个不错的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ffd62395b1f8cacde1e03c