专栏/使用zerotier优化P2P游戏联机体验

使用zerotier优化P2P游戏联机体验

2022年02月01日 03:53--浏览 · --点赞 · --评论
粉丝:44文章:3

开篇废话

最近被朋友拉去玩战锤,联机体验实在是差到飞起,打场仗三秒一停的,二十分钟的攻城战愣是打了三十分钟才结束,开了加速器都无解。

于是我猜测,这游戏应该是通过P2P联机的,但是由于我们两个的运营商不同,网络不互通,又没有公网IP,数据可能经由战锤官方的服务器进行中转了,所以丢包特别严重,如果能够构建虚拟局域网,应该能优化联机体验,于是我找到了个叫zerotier的软件,可以构建虚拟局域网,让我们在没有公网IP的情况下也能P2P联机,来优化联机的体验

准备条件

1.脑子和手

2.一台中国大陆vps

正式流程

创建zerotier网络

进入zerotier官网(ZeroTier Central),注册账号,创建一个网络

创建好后保留默认设置就好

这里记一下Network ID,等会要用到

搭建MOON服务器

zerotier的服务器都在海外,因此我们国内用户使用时可能会出现无法连通P2P的情况,这样会导致所有流量都经由zerotier官方服务器中转,延迟和丢包会非常严重

因此我们可以搭建一个moon服务器,moon服务器相当于一个中转服务器,可以保证我们能够顺畅打通P2P,保证低延迟和不丢包

因为moon服务器只起到一个握手的作用,在P2P打通后就没有moon服务器啥事了,因此不用担心moon服务器的延迟和宽带会影响联机体验,但是moon服务器务必位于国内,如果服务器位于海外的话,数据经由GFW出口,可能无法顺利打通P2P

至于服务商的选购,这里就不多叙述了,推荐一下阿里云和腾讯云的学生机,9元一个月,我这里用的是腾讯云的无忧服务器,15元一月,数据中心位于广州

ssh进vps后,输入以下命令来安装zerotier

curl -s https://install.zerotier.com/ | sudo bash

安装执行完成后,加入zerotier局域网

zerotier-cli join <network id>

生成配置文件

sudo chmod 777 /var/lib/zerotier-one
cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json

之后编辑moon.json(vi编辑器的用法可自行上网搜索)

vi  moon.json

修改内容如下,添加自己vps的公网IP

"stableEndpoints": [ "vps公网IP/9993" ]

之后生成moon配置文件

sudo zerotier-idtool genmoon moon.json

新建moons.d文件夹,并将生成的moon配置文件放进去(注意,每个人的moon配置文件文件名不一样,我这里的是0000001ae3f8ae77.moon,执行命令前请修改成你自己的配置文件的文件名)

mkdir moons.d
mv 0000001ae3f8ae77.moon  moons.d/  

之后重启zerotier就好了

sudo systemctl restart zerotier-one.service

重启好后,进入zerotier官网的网络配置,可以看到一个未验证设备接入,这个就是我们刚刚配置的moon服务器了,给前面的小框打勾,允许这个设备接入

至此,moon服务器配置好了,接下来来到客户端配置

客户端配置

注意,你和你一起联机的朋友都需要进行客户端配置

先在官网下载zerotier  Windows端的安装包

下载安装好后,你会发现啥界面都没有,不要以为没安装上(我就是以为没安装上,重复安装了十几遍)

在Windows开始菜单搜索zerotier就能找到它了

双击启动后就会在任务栏里出现了

右键任务栏的zerotier,打开zerotier控制面板

在#######的框里输入你的Network ID来加入网络,加入成功后如图所示

然后在zerotier官网的网络配置里,允许这台设备的接入

之后进入C:\ProgramData\ZeroTier\One文件夹,新建moons.d文件夹,并将之前在moon服务器生成的moon配置文件丢进去

之后打开任务管理器,转到【服务】选项卡,点击【打开服务】,重启一下zerotier

文章配图

之后在命令终端里查看一下节点列表

zerotier-cli listpeers

出现moon服务器即为成功

文章配图

ping一下延迟

此图片的alt属性为空;文件名为%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE-2022-02-01-112554.jpg
此图片的alt属性为空;文件名为%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE-2022-02-01-112855.jpg

只有20ms,P2P连接成功建立了

如果ping不通的话,打开Windows防火墙的【高级设置】

此图片的alt属性为空;文件名为%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE-2022-02-01-113024-1024x570.jpg

在入站规则里启用这两个规则就行

文章配图

游戏体验

搭建了虚拟局域网,实现了P2P联机后,战锤的联机游戏体验明显好了很多,丢包变得少了很多,打仗不会出现三秒一停的情况了

理论上来说所有P2P游戏的联机都能这样优化,倘若是帝国霸业这样需要启动服务端的游戏,只要在多人游戏里连接主机端的内网IP即可


投诉或建议