现代的电子游戏,不管是端游还是手游,网络游戏还是单机游戏,或多或少都会需要一些网络功能。从验证正版,到登录注册,再到多人交互,实时对战,都需要服务器端的支持。

游戏服务器端,是一个长期运行的程序,还要服务于多个不定时,不定点的网络请求。一个游戏服务器从游戏逻辑方面可以分为以下几个模块:

•注册和登录•网络协议•数据库•玩法逻辑•其他通用模块

注册和登录

这点和网站后台开发有点不同,因为游戏帐户的注册都是由第三方平台提供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 折优惠中,点击文末的「阅读原文」了解课程更多内容!

????????????

从零搭建游戏服务器,拢共分几步?相关推荐

  1. 从零搭建游戏服务器,编译过程和环境部署教程详解

    现代的电子游戏,不管是端游还是手游,网络游戏还是单机游戏,或多或少都会需要一些网络功能.从验证正版,到登录注册,再到多人交互,实时对战,都需要服务器端的支持. 游戏服务器端,是一个长期运行的程序,还要 ...

  2. 《梦幻西游H5》L inux搭建游戏服务器!

    西游H5 linux 架设教程 准备工具: Termux(安卓) Notepad++ SecureCRT WinSCP 安装宝塔直接运行命令即可. yum install -y wget && ...

  3. 搭建游戏服务器的问题笔记

    1:FTBserver进行数据的传输,FTP服务器可以设置匿名登录或者账号登录,8uftp.需要服务器然后客户端连接 2 : 数据库的建立注意不要占用接口,一般使用3306,在连接其它机器数据库的时候 ...

  4. php 多人游戏_「谁会是下一个王者农药」云服务器如何搭建游戏服务器?

    手游越来越火了,听听业内人士的分析,他山之石,多多借鉴,那么手游的服务器到底如何搭建的? 从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务 ...

  5. 从零搭建nginx服务器

    本文开始从零搭建一个nginx网页服务器. 1.最小化安装linux(web服务器需要纯净的环境) 2.局域网环境(环境限制,需要搭建本地包配置环境) 3.配置安装nginx环境 1.搭建系统 物理系 ...

  6. linux下搭建游戏服务器运行环境

    最近一直只在搭建公司游戏服务器的运行环境. ps背景:  使用java开发,之前一直都是在window环境下开发的,现在要将项目部署到linux环境下 ,所以历程缓慢啊... 说说过程中都遇到啥吧! ...

  7. Netty+SpringBoot搭建游戏服务器(带控制台客户端)

    Netty与SpringBoot的游戏服务器 目录 Netty与SpringBoot的游戏服务器 前言 一.项目整体流程 二.项目启动 1.克隆或下载该项目 2.导入idea,或者上一步用idea导入 ...

  8. 保姆级教程从零搭建云服务器(小彩蛋,请大家看烟花秀)

    笔者已从零搭建好云服务器,在文章开始笔者请大家看一场简单的烟花秀,该篇博文是写给小白的保姆级教程,不论是有基础还是没基础的,都可以根据本篇博文,轻松搭建个人云服务器. 烟花秀:浏览器直接输入ysw.w ...

  9. 从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

    目录 引言 技术选型 正文 创建基础架构 IDEA创建项目 添加Netty监听端口 编写客户端进行测试 总结 引言 由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的. ...

最新文章

  1. Microbiome:肠道菌群失衡促进高血压
  2. Windows7操作系统自定义运行命令(简单方法之二)
  3. verycd重整——linux教程
  4. 数据结构 - 二元查找树
  5. 在命令行中管理 Wifi 连接
  6. bootstrap 栅栏剧中_Bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法...
  7. 餐厅点餐系统:测试与部署
  8. L1-057 PTA使我精神焕发 (5 分)-PAT 团体程序设计天梯赛 GPLT
  9. 加载不同库,同名函数引起的BUG一例
  10. netty心跳功能机制实现
  11. python中index什么意思_index在python中是什么意思
  12. 2020第十二届全国大学生数学竞赛初赛试题及答案(江苏非数)
  13. 多线程写法 与老虎机的制作
  14. oracle 查询数据的结果集导出
  15. 2016码农谷全国大学生程序设计邀请赛(测试赛)
  16. 如何系统化学Python?
  17. android声音录制音量太小,为什么总是感觉手机音量太小?跟我这样设置,声音瞬间大上许多...
  18. 实施工程师日常必备技能
  19. 5G DTU 数据上传 无线通信
  20. 不定积分——类似1/(1+e^x)的积分

热门文章

  1. Spring retry重试框架
  2. 小程序创业会有哪些坑
  3. 关于spring boot自动注入出现Consider defining a bean of type ‘xxx‘ in your configuration问题解决方案
  4. 崩坏3区号+86_86的区号是代表中国!那82是代表哪个国家?
  5. 徐志果:创业就是遇见更好的自己(我的成长之路)
  6. UEFI启动模式下, 双硬盘安装UBuntu16.04与Win10双系统
  7. Frames : 一个特殊的窗口类型
  8. 红帽Linux自带的光盘刻录,cdrecord -- linux下光盘刻录
  9. 操作系统转载和注释___荷风听雨
  10. CSS初级教程(颜色、注释、选择器)【第一天】