使用zerotier優(yōu)化P2P游戲聯(lián)機(jī)體驗(yàn)
開篇廢話
最近被朋友拉去玩戰(zhàn)錘,聯(lián)機(jī)體驗(yàn)實(shí)在是差到飛起,打場(chǎng)仗三秒一停的,二十分鐘的攻城戰(zhàn)愣是打了三十分鐘才結(jié)束,開了加速器都無解。
于是我猜測(cè),這游戲應(yīng)該是通過P2P聯(lián)機(jī)的,但是由于我們兩個(gè)的運(yùn)營(yíng)商不同,網(wǎng)絡(luò)不互通,又沒有公網(wǎng)IP,數(shù)據(jù)可能經(jīng)由戰(zhàn)錘官方的服務(wù)器進(jìn)行中轉(zhuǎn)了,所以丟包特別嚴(yán)重,如果能夠構(gòu)建虛擬局域網(wǎng),應(yīng)該能優(yōu)化聯(lián)機(jī)體驗(yàn),于是我找到了個(gè)叫zerotier的軟件,可以構(gòu)建虛擬局域網(wǎng),讓我們?cè)跊]有公網(wǎng)IP的情況下也能P2P聯(lián)機(jī),來優(yōu)化聯(lián)機(jī)的體驗(yàn)
準(zhǔn)備條件
1.腦子和手
2.一臺(tái)中國(guó)大陸vps
正式流程
創(chuàng)建zerotier網(wǎng)絡(luò)
進(jìn)入zerotier官網(wǎng)(ZeroTier Central),注冊(cè)賬號(hào),創(chuàng)建一個(gè)網(wǎng)絡(luò)

創(chuàng)建好后保留默認(rèn)設(shè)置就好
這里記一下Network ID,等會(huì)要用到
搭建MOON服務(wù)器
zerotier的服務(wù)器都在海外,因此我們國(guó)內(nèi)用戶使用時(shí)可能會(huì)出現(xiàn)無法連通P2P的情況,這樣會(huì)導(dǎo)致所有流量都經(jīng)由zerotier官方服務(wù)器中轉(zhuǎn),延遲和丟包會(huì)非常嚴(yán)重
因此我們可以搭建一個(gè)moon服務(wù)器,moon服務(wù)器相當(dāng)于一個(gè)中轉(zhuǎn)服務(wù)器,可以保證我們能夠順暢打通P2P,保證低延遲和不丟包
因?yàn)閙oon服務(wù)器只起到一個(gè)握手的作用,在P2P打通后就沒有moon服務(wù)器啥事了,因此不用擔(dān)心moon服務(wù)器的延遲和寬帶會(huì)影響聯(lián)機(jī)體驗(yàn),但是moon服務(wù)器務(wù)必位于國(guó)內(nèi),如果服務(wù)器位于海外的話,數(shù)據(jù)經(jīng)由GFW出口,可能無法順利打通P2P
至于服務(wù)商的選購(gòu),這里就不多敘述了,推薦一下阿里云和騰訊云的學(xué)生機(jī),9元一個(gè)月,我這里用的是騰訊云的無憂服務(wù)器,15元一月,數(shù)據(jù)中心位于廣州
ssh進(jìn)vps后,輸入以下命令來安裝zerotier
curl -s https://install.zerotier.com/ | sudo bash
安裝執(zhí)行完成后,加入zerotier局域網(wǎng)
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編輯器的用法可自行上網(wǎng)搜索)
vi ?moon.json
修改內(nèi)容如下,添加自己vps的公網(wǎng)IP
"stableEndpoints": [ "vps公網(wǎng)IP/9993" ]
之后生成moon配置文件
sudo zerotier-idtool genmoon moon.json
新建moons.d文件夾,并將生成的moon配置文件放進(jìn)去(注意,每個(gè)人的moon配置文件文件名不一樣,我這里的是0000001ae3f8ae77.moon,執(zhí)行命令前請(qǐng)修改成你自己的配置文件的文件名)
mkdir moons.d
mv 0000001ae3f8ae77.moon ?moons.d/ ?
之后重啟zerotier就好了
sudo systemctl restart zerotier-one.service
重啟好后,進(jìn)入zerotier官網(wǎng)的網(wǎng)絡(luò)配置,可以看到一個(gè)未驗(yàn)證設(shè)備接入,這個(gè)就是我們剛剛配置的moon服務(wù)器了,給前面的小框打勾,允許這個(gè)設(shè)備接入

至此,moon服務(wù)器配置好了,接下來來到客戶端配置
客戶端配置
注意,你和你一起聯(lián)機(jī)的朋友都需要進(jìn)行客戶端配置
先在官網(wǎng)下載zerotier ?Windows端的安裝包
下載安裝好后,你會(huì)發(fā)現(xiàn)啥界面都沒有,不要以為沒安裝上(我就是以為沒安裝上,重復(fù)安裝了十幾遍)
在Windows開始菜單搜索zerotier就能找到它了
雙擊啟動(dòng)后就會(huì)在任務(wù)欄里出現(xiàn)了
右鍵任務(wù)欄的zerotier,打開zerotier控制面板

在#######的框里輸入你的Network ID來加入網(wǎng)絡(luò),加入成功后如圖所示
然后在zerotier官網(wǎng)的網(wǎng)絡(luò)配置里,允許這臺(tái)設(shè)備的接入

之后進(jìn)入C:\ProgramData\ZeroTier\One文件夾,新建moons.d
文件夾,并將之前在moon服務(wù)器生成的moon配置文件丟進(jìn)去

之后打開任務(wù)管理器,轉(zhuǎn)到【服務(wù)】選項(xiàng)卡,點(diǎn)擊【打開服務(wù)】,重啟一下zerotier

之后在命令終端里查看一下節(jié)點(diǎn)列表
zerotier-cli listpeers
出現(xiàn)moon服務(wù)器即為成功

ping一下延遲


只有20ms,P2P連接成功建立了
如果ping不通的話,打開Windows防火墻的【高級(jí)設(shè)置】

在入站規(guī)則里啟用這兩個(gè)規(guī)則就行

游戲體驗(yàn)
搭建了虛擬局域網(wǎng),實(shí)現(xiàn)了P2P聯(lián)機(jī)后,戰(zhàn)錘的聯(lián)機(jī)游戲體驗(yàn)明顯好了很多,丟包變得少了很多,打仗不會(huì)出現(xiàn)三秒一停的情況了
理論上來說所有P2P游戲的聯(lián)機(jī)都能這樣優(yōu)化,倘若是帝國(guó)霸業(yè)這樣需要啟動(dòng)服務(wù)端的游戲,只要在多人游戲里連接主機(jī)端的內(nèi)網(wǎng)IP即可