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