请选择 进入手机版 | 继续访问电脑版
 前一阵,一场突如其来的疫情,将我们都困在了家中,于是有了大把的时间,来做一些自己感兴趣的事情。当然,是打游戏咯。
  不过只是打游戏,也太low了,完全不符合我们程序员的气质,我们作为网络世界中的众多缔造者之一,仅仅扮演一个渺小的角色,未免太过无趣。于是,我想到自己搭建服务器给自己玩,做自己的神~哈,开玩笑的,其实是为了更好的了解那些手游端游的运作机制啦,就搭建了几款不同的游戏,也算研究研究 常用架构吧。

准备工作
准备游戏服务架构
  这些天,我下载了很多游戏的服务架构,页游、手游、端游都有。看到里面的配置和架构也都五花八门。总的来说,一般页游大多是AMP+JAVA,手游遇到很多, JAVA+MongoDB,页游AMP+Erlang+RabbitMQ的组合。端游就更加五花八门了,很多引擎或者自制脚本,使用的数据库种类也很多,MongoDB、mysql、SQL Server等等,不同游戏的架构选择都不同。
  因为我们自己肯定没法写出来一个完整的游戏服务包,所以最理想的也是最简便的方法就是使用别人已经写好的现成的服务包,安装配置即可(里面坑巨多,免费分享出来的,完整性和质量就没法苛求了),大部分修复下或者调整下也是能够凑活跑起来的。
  不过倒也遇到很多问题,游戏中有很多bug,例如这个任务流程过不去,那个点了没反应,只能边玩边吐槽;还有个手游架设好后,一直没有报错,就一直没管他,运行3天后,有小伙伴说登录不上,才发现服务器数据库崩掉连接不上了,由于搭建好后就没有关注监控这个服务器,甚至不知道是啥时候崩掉的,也就不知道为什么会崩,重新搭建连接完数据库,之前玩的游戏数据也就清空没有(没有设置实时备份数据库),小伙伴们很是扫兴,还好不是实际生产中,这我也很无奈啊。
  但总体下来,大家反应都是很不错的,毕竟道具无限,人人都是大佬,也算无聊的假期大家一起有共同消遣了。

网络环境
  因为要自己开服务器,如果只是在本地电脑上配置,那其他小伙伴们就没法连接进来,自己游戏里再NP也没人分享可太悲哀了。所以,我们一定要连上外网,需要公网IP,才可以供他人访问。
  博主有一个aws的海外云主机,还有一个腾讯云的国内云主机,虽然直接在云主机上搭建可以直接解决公网IP的问题,不过这俩云主机配置都不高,都是1C1G,担心无法完美支撑服务跑起来(花钱升级配置是不可能的~)。于是初步决定在本地先将服务跑起来,用 专线隧道 打通本地电脑和云主机的网络,配置云主机的反向代理,实现游戏服务器公网搭建。做出规划步骤如下

本地搭建游戏服务端
用 专线隧道 打通本地主机和云主机的网络
配置云主机的代理转发
修改本地主机的游戏服务监听端口
配置客户端
正式搭建
本地搭建游戏服务端
  因为我搭建了很多不同类型的游戏,且每一种其实方法步骤都不一样,需要的配置和环境也都不同,遇到的问题也不尽相同,在这里就没法一一细说了,会在文末将我搭建成功的那些服务包都贴出来,有需要的小伙伴可以自行研究。

打通网络
  可以参考我之前博客https://hewanyue.com/blog/2c6b894f.html架设隧道 。协议可以使用UDP,之前我用TCP总是被封掉。搭建好,建立连接后,其实就已经算是打通网络了。
  在window cmd命令行或者linux的终端里ping 10.8.0.1 就可以ping通云主机了的。然后也可以尝试用云主机验证 访问本地10.8.0.6上面的http服务之类的。

配置云主机反向代理
  虽然这两台机子间是联通了,但是别人访问你的云主机的IP,并不能连接到你本地的服务器主机,所以我们需要在防火墙上配置转发。
  例如本地服务器开启的端口为 12345,而我们想让别人访问云主机的 54321端口就可以登录我们的游戏服务,需要填写dnat 还有地址伪装。代码如下:

iptables -t nat -D PREROUTING -d 0.0.0.0 -p tcp --dport 54321 -j DNAT --to-destination 10.8.0.6:12345
1
  如果客户端设置的链接协议是UDP,那就将tcp改为UDP,若是不知道客户端程序写的链接方式到底是什么,可以写两条将这俩都转发了。不过如果不写协议会报错的。

[root@ip-172-31-39-115 ~]# iptables -t nat -D PREROUTING -d 0.0.0.0 --dport 54321 -j DNAT --to-destination 10.8.0.6:12345
iptables v1.8.2 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
1
2
3
  如果不想改不同的端口,倒也可以简单粗暴的,将访问云主机的所有数据统统转发到本地,但这样的话,云主机的其他功能就都会受到影响,不建议这样(云主机上没有其他服务倒也可以这样)。
  还有记得防火墙开启转发功能,否则可能服务器的内网网卡收不到数据报文。

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
1
2
  有的游戏,本地服务器还配有网站等等例如gm简易工具,需要我们在外网也能访问。可以设置nginx或者apache的反向代理转发,比较简单,这里就不细说了。

修改本地主机的游戏服务监听IP端口
  出于安全考虑,很多游戏服务配置的时候,相互之间都是,配置了访问权限的,我下载的大部分游戏都是监听在本地127.0.0.1回环网卡的,如果我们不修改监听地址,从我们构建来的专线的访问数据是没有权限访问我们的服务的,所以我们需要将监听地址修改为10.8.0.6专线网卡的ip上。或者改为0.0.0.0(不建议,有可能端口冲突,造成服务起不来或者报错)。
  一般php或者数据库那些地址就不用改了,因为还是从本地读取的。到时候捋一捋就可以确保正确连接了。

配置客户端
  因为一般需要连接的服务器IP端口,都是写死在客户端中的,我们修改了服务器的地址,所以还要在客户端中修改为正确的ip地址端口,才可以链接(页游不用,页游没有客户端)。
  不同游戏修改方式和路径都不相同,安卓端可以用APKIDE,苹果ipa的可以直接将后缀改为rar,解压后修改对应ip,这里就不细说了。欢迎就具体游戏来讨论。

附本人搭建测试成功的游戏及网盘分享
手游剑侠情缘
游戏预览:(随便拍的,手边没有安卓机,用的电脑模拟器)

剑侠情缘手游

安装vmware的centos虚拟机,里面是java程序。
  下载地址
  剑侠情缘VM一键端
链接:https://pan.baidu.com/s/1D0qOO7XcK2K93BLXCsw-fA
提取码:4371

手游蓝月传奇
游戏预览:



  这个是在windows环境下运行的,用到PHP、nodejs、mysql、Erlang+rabbitMQ
  下载地址
  【蓝月传奇】一键端+修改教程+全功能GM网页后台+外网教程
链接:https://pan.baidu.com/s/1wjfmMWaTf2YxZ0rxjCtknw
提取码:6c8m

手游七雄争霸
  JAVA游戏,windows环境搭建,用到了memcached、nodejs、PHP
  下载地址
链接:https://pan.baidu.com/s/1o-pZb4TWKZWf3vmGk70bfQ
提取码:78ws

手游 幽冥传奇
  Windows环境运行,用的战神引擎。
  下载地址
链接:https://pan.baidu.com/s/1mLgic84xPkBhkrOiJqx4ZQ
提取码:ja6l








页游 传奇世界
  H5游戏,也还不错。
链接:https://pan.baidu.com/s/1Zv1vMoD9l1cegh3FRghaXA
提取码:7057

页游 赤月传说
链接:https://pan.baidu.com/s/1S1RW6JAmR1Xx063XzoJTOA
提取码:i168

端游 无极联盟传奇
  Windows环境运行,用的GOM引擎。
  这个虽然特效还有模式都还不错,不过是个残端,里面没有提供pak密码,不建议安装。
下载地址
链接:https://pan.baidu.com/s/13OOZxWbESveJLXmeS-w1Bw
提取码:7nom

端游 三国战纪OL(第二季)
  Windows环境运行,用的GOM引擎。这个可以完美开服,还算不错。
链接:https://pan.baidu.com/s/12x4Kvb-_Pipn6Qs73JkBPw
提取码:xb6r

  很多游戏搭好之后,玩了也还不错,不过忘记保留截图了。还有一些还没上传,等日后再分享。欢迎交流讨论。
————————————————
版权声明:本文为CSDN博主「MicePro」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MicePro/article/details/104376100

回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注微信公众号

    QQ|Archiver|手机版|小黑屋|极客同行 ( 蜀ICP备17009389号-1 )

    Powered by Discuz! X3.4  © 2001-2013 Comsenz Inc.