现代的电子游戏,不管是端游还是手游,网络游戏还是单机游戏,或多或少都会需要一些网络功能。从验证正版,到登录注册,再到多人交互,实时对战,都需要服务器端的支持。
游戏服务器端,是一个长期运行的程序,还要服务于多个不定时,不定点的网络请求。一个游戏服务器从游戏逻辑方面可以分为以下几个模块:
•注册和登录•网络协议•数据库•玩法逻辑•其他通用模块
注册和登录
这点和网站后台开发有点不同,因为游戏帐户的注册都是由第三方平台提供SDK的,游戏开发过程中只要开发登录逻辑即可。游戏开发后续决定使用哪个运营平台的时候才会去考虑接收平台提供的SDK。登录流程可以参考以下这个时序图:
网络协议
网络协议在这里不是指TCP或HTTP这些,或者在这之上的应用层协议。这里的网络协议是用于游戏中的客户端和服务器交流的。其中用的最多的就是Google的协议缓冲区了,也有直接用 JSON 或者 MessagePack 的。
数据库
早期的游戏服务器是没有使用数据库的,玩家的数据直接存文件的,一个玩家一个数据文件。
现代的游戏服务器都配备了数据库,是因为游戏越来越复杂,数据量也越来越多,而且采用数据库也方便对数据的管理和备份。
数据库的选取一般跟游戏项目无关,跟开发者的习惯和经验有关。市面用的游戏用到的数据库大多是下面这几种:
• MySQL• MongoDB• Redis
数据库在游戏服务器中的作用主要是落地玩家和玩法相关的数据,游戏开发中并不会依赖于数据库是关系型数据库还是非关系型的数据。一般建议采用MongoDB作为游戏数据库,因为在游戏开发过程中用到的数据结构用的最多的就是dict类型,跟MongoDB的数据结构(采用的是BSON )类似。而且版本交替的过程中,不像SQL一样需要去修改表结构。用作为内存数据库,实际开发过程中都是结合MySQL来使用的比较多。
除了上面介绍的这些数据库,还需要了解下内存缓存(也有称为内存数据库的)这个概念。这样的玩家登录成功后,玩家的数据是要缓存到内存中的,方便快速对数据的修改。线后也不会立即清除缓存,方便短时间内重登可以快速读取到玩家的数据。
玩法逻辑模块
下面是游戏开发中常见的玩法模块,一般的游戏都会包含这些玩法。可能不同的游戏,玩法名字会有所不同。
•背包系统•装备系统•英雄系统•任务系统•推图副本•战斗系统•活动管理•内币商店•充值(外币商店)•单人竞技场•多人竞技场•公会系统•好友系统•聊天系统•邮件系统•新手指引•红点管理
其他通用模块
下面这些模块是辅助开发上面介绍的玩法逻辑模块用的,例如聊天需要用到敏感词检测,好友或者公会搜索会使用到模糊搜索。
•定时器•事件分发•离线消息本身•批处理数量•敏感词检测•模糊搜索•游戏日志系统•运营日志系统
工具类模块
工具类模块在游戏开发中也是必不可少的,下面列出了常用的一些工具:
• Excel配置导表工具•通用指令•测试机器人•服务器打包部署工具
最常见的就是Excel配置导表工具了,是用作将配置配置的Excel表格转换成代码中能方便使用的数据结构。诸如Python的字典结构,Lua的表结构等等。
GM指令主要是用来做玩法测试的,或者新建一个了一个账号,不用从头开始练级,可以直接用指令修改等级和分发道具。
测试机器人主要是在服务器开发过程中使用的,因为在开发的过程中,客户端和服务端只是先商定了交互协议。在客户端还没有制作完需求功能的时候需要使用测试机器人来测试自己的代码逻辑,例如 Postman 这种测试接口的工具。测试机器人还有另外一个用途就是模拟正常玩家来压测服务器。
服务器打包部署工具也是必要的,一般就是打包和加密游戏服务器代码的脚本。插入一键部署的脚本可以更方便运维他们更换的部署服务器。
游戏后台相关模块
后台一般是运营团队开发的。下面添加了几个跟游戏服务器有关联的后台模块:
•公告系统•邮件系统•活动系统•礼包系统•运营日志
公告一般有两种,一种是用于停服维护的时候在登录界面显示的公告,一种是用于游戏中滚动显示的公告。根据游戏类型决定需求的,有些游戏没有滚屏公告的。
邮件系统是用于客服的全服邮件或者单人邮件给玩家用的,游戏服务器提供对应的接口给后台发邮件就行。
活动系统是用于运营商配置服务器活动开放时间用的。礼包系统是用于配置礼包兑换码的。运营日志是用于查看游戏中输出的打点日志的,做数据统计和分析用的。
游戏服务器引擎skynet介绍
skynet是一个轻量级的为在线游戏服务器打造的框架。如何使用可以参考官方的wiki ,后续课程的示例都是基于这套框架上实现的,可以把它比作于web开发框架里的 Openresty 或者烧瓶等等。
天网服务器引擎的特点:
•开源且作者持续维护•Actor
模式•多线程•多进程,内置cluster
最大化
更多关于skynet的资料可以阅读下云风的博客,里面有介绍skynet从出生开始的相关历史和疑难杂症。
skynet 开发环境搭建
下载引擎
打开桌面上的Xfce终端,先创建好工程目录:
cd Code
mkdir server
cd server
下载引擎需要用到git,把skynet代码克隆下来。
git clone https://github.com/cloudwu/skynet.git
也可以参考下面这个截图里进行命令操作。
完成后的工程目录结构这样的:
Code
└── server
└── skynet
编译
进入到skynet目录,执行make linux
进行编译操作:
cd skynet
make linux
运行演示
编译成功之后,执行./skynet examples/config
启动服务器:
./skynet examples/config
运行效果如下:
大功告成!一个开发环境就部署好了
以上内容出自实验楼新课《Skynet 游戏服务器开发实战》,在课程中,你将了解到一个游戏服务器从游戏逻辑方面存在的 5 个模块:注册和登录、网络协议、数据库、玩法逻辑、其他通用模块。并逐步由浅入深、由易到难,亲手开发一个游戏服务器。
Skynet 是一个使用 C 和 Lua 语言开发的轻量级游戏框架。得益于 Skynet 这么好的框架,游戏服务器开发无需从零开始,只需要简单的扩展就能开始写游戏逻辑。
我们将从最基础的 Skynet 编译运行开始,设计最简单的游戏服务器架构,从 RPC 协议,数据库数据,内存数据,Excel 配置数据,再到玩法逻辑。通过循序渐进和实战的方式学习游戏服务器开发。
课程的思维导图如下:
课程地址:
https://www.lanqiao.cn/courses/2770
你将学到:
课程限时 8 折优惠中,点击文末的「阅读原文」了解课程更多内容!
????????????