现代电子游戏,无论是端游、手游、网游还是单机游戏,或多或少都需要一些网络功能,从验证真实性,到登录注册,再到多人互动、实时对战,都需要服务器端的支持。
游戏服务器是一个长期运行的程序,同时也服务于多个不定期、不固定的网络请求。 主机评测&技术分享 我来告诉你,一个游戏服务器从游戏逻辑的角度可以分为多少个模块?
注册和登录
这个和网站后台开发有点不一样,因为游戏账号的注册都是由第三方平台提供的SDK来实现的,游戏开发过程中只需要开发登录逻辑即可。后续游戏开发决定使用哪个运营平台时,会考虑接收平台提供的SDK。登录流程可以参考下面的时序图:
网络协议
这里的网络协议不是指TCP或者HTTP,也不是指它们之上的应用层协议,这里的网络协议是游戏中客户端与服务器之间通讯使用的,最常用的是Google的protocol buffer,也有直接使用JSON或者MessagePack的。
数据库
早期的游戏服务器并没有使用数据库,玩家的数据直接存储在文件中,每个玩家一个数据文件。
现代的游戏服务器都配备了数据库,因为游戏越来越复杂,数据量越来越大,同时使用数据库也方便数据的管理和备份。
数据库的选择一般和游戏项目关系不大,而是和开发者的习惯和经验有关,市面上游戏使用的数据库大多有以下几种:
数据库在游戏服务器中的作用主要是将玩家、玩法相关的数据落地。游戏开发并不依赖于数据库是关系型数据库还是非关系型数据。一般建议使用MongoDB作为游戏数据库,因为游戏开发过程中最常用的数据结构是dict类型,与MongoDB的数据结构比较类似(使用BSON)游戏搭建,而且在版本变更过程中不需要像SQL那样修改表结构。其作为内存数据库使用,在实际开发过程中经常与MySQL结合使用。
除了上面介绍的数据库之外,还需要了解内存缓存(也叫内存数据库)的概念。玩家登录成功后,会将玩家的数据缓存在内存中,方便快速修改数据。退出后不会立即清除缓存,以便短时间内再次登录后可以快速读取玩家的数据。
游戏逻辑模块
以下是游戏开发中常见的玩法模块,大部分游戏都会包含这些玩法,不同游戏对玩法的叫法可能有所不同。
背包系统 装备系统 英雄系统 任务系统 地图推送 地下城战斗系统 活动管理 内币商店充值(外币商店) 单人竞技场 多人竞技场 公会系统 好友系统 聊天系统 邮件系统 新手引导 红点管理
其他常用模块
以下模块用于辅助开发上面介绍的玩法逻辑模块,例如聊天时需要敏感词检测,搜索好友或公会时需要模糊搜索等。
定时器事件分发 离线消息本身 批量处理量 敏感词检测 模糊搜索 游戏日志系统 操作日志系统
工具模块
工具模块在游戏开发中也是必不可少的,下面介绍一些常用的工具:
最常见的就是Excel配置表导出工具,用于将配置Excel表转换成代码中可以方便使用的数据结构,比如Python的字典结构,Lua的表结构等。
GM命令主要用于游戏测试,或者创建新账号。不需要从头开始练级,可以直接使用命令修改等级、分配道具。
测试机器人主要用在服务端开发过程中,因为在开发过程中,客户端和服务端只约定了交互协议,在客户端还未完成所需功能之前,需要使用测试机器人来测试自身的代码逻辑,比如接口测试工具 Postman。测试机器人的另一个用途是模拟普通玩家对服务端进行压力测试。
服务器打包部署工具也是必备的,一般都是一些对游戏服务器代码进行打包和加密的脚本,插入一键部署脚本可以使得它们所替代的部署服务器更加容易运维。
游戏背景相关模块
后端一般由运营团队开发,下面列出几个与游戏服务器相关的后端模块:
公告系统邮件系统活动系统礼包系统操作日志
公告一般分为两种,一种是停机维护时在登录界面显示的公告,一种是游戏过程中以滚动方式显示的公告,需求根据游戏类型而定,有的游戏是没有滚动公告的。
邮件系统用于客服向玩家发送全服邮件或者个人邮件,游戏服务器提供相应接口向后台发送邮件。
活动系统用于运营人员配置服务器活动开放时间,礼包系统用于配置礼包兑换码,操作日志用于查看游戏的输出日志,进行数据统计和分析。
Skynet游戏服务器引擎简介
Skynet 是一个轻量级的在线游戏服务器框架,具体使用方法可以参考官方 wiki,后续课程中的示例均基于此框架,可以类比 Web 开发框架中的 Openresty 或 Flask。
Skynet 服务器引擎的特点:
Skynet开发环境搭建下载引擎
打开桌面上的Xfce终端,先创建项目目录:
cd 代码
mkdir 服务器
光盘服务器
要下载引擎,您需要使用 git 来克隆 skynet 代码。
git 克隆
完成的项目目录结构如下:
编译
进入skynet目录,执行make linux进行编译:
运行演示
编译成功后,执行./skynet examples/config启动服务器:
运行效果如下:
大功告成!一个开发环境就部署好了。如果对游戏服务器的配置和环境还有疑问,可以私信。同时给大家分享一个服务器供应商游戏搭建,至真数据(),他们的服务器非常不错,无论是性能还是服务,建议尝试一下。有月付测试,服务器还有独立的控制面板,很方便。如果大家需要什么指导和测评,欢迎给主机测评&技术分享留言!