前言:

在網吧打遊戲的時候網速突然變差了,會聽到有人喊我卡了卡了,然後你會發現他的電腦上人物處於漂移狀態,小兵一直再A一個目標,目標死了小兵還會繼續A,其他人電腦上顯示他玩的英雄已經死了,他這邊依然顯示活著。

正文部分:

這裡首先得介紹下現在的網路遊戲的架構,由於很多人不是IT這個行業的,所以就抽象介紹一下。

大家都知道玩遊戲首先要去下載,你下載的這個東西叫做客戶端(比如手機上的王者榮耀),但是網路遊戲還有一個隱藏的東西叫伺服器(單機遊戲是沒有伺服器這東西的,所以單機遊戲不需要聯網),伺服器的作用就是讓你能夠與其他玩家建立一個橋樑,你的客戶端需要連接伺服器才能正常運行,當你斷開網路的時候,你的客戶端打開之後會連接不到伺服器,導致你進不去,他們之間大概是這樣的關係。

玩家與玩家直接是無法建立連接的!!!

而你在遊戲上做的每一個指令,移動,釋放技能,購買道具都是需要先告訴伺服器的!,流程如下.

首先玩家釋放R技能,首先通過第一步告訴伺服器你做了這個操作,然後伺服器進行各種操作後,會把你這個釋放R技能這個操作再告訴其他玩家,讓其他玩家知道你釋放了R技能,因為計算機以及網路傳輸速度是很快的,所以當你按下這個R鍵的一瞬間,這些事情就全部完成了。

大家有沒有發現,遊戲技能特效一般維持時間比較久,除了炫酷之外還有沒有其他原因呢?

首先客戶端是有自己的運行邏輯的,很多遊戲為了避免遊戲延遲,當你釋放技能的時候,如果客戶端判斷你能使用這個技能,首先會播放這個技能的特效(注意此時別人的電腦是不會顯示你這個技能的特效的),然後告訴服務端你使用了這個技能,此時這個技能的CD,你扣的藍量,別人收到的傷害必須要等服務端那邊告訴玩家,玩家才會有改變,在正常網速下,這個流程可能只要幾微秒,所以玩家感受不出來技能特效是提前放的。所以如果技能特效一瞬間就沒了,會存在一種情況,你的技能特效直接結束了,而此時服務端還來不及通知你,此時會導致技能顯示結束了,對方沒有受到傷害,過一段時間對方才受到傷害,所以技能特效維持比較久還有一部分原因是降低延遲。

同理,你的每個操作客戶端都是會首先試運行

所以玩家如果突然斷網了,玩家的所有操作在玩家的電腦上是能夠進行的,比如移動,釋放技能,但是你的這些操作都發送不到伺服器,在伺服器那裡,你還是在你斷網之前的那個狀態。

場景1:

比如 你在A點,此時伺服器保存你的狀態在A點,斷網,你從A點走向了B點,由於客戶端會試運行,直接將你人物從A點移動到B點,但是當你恢復網路的一瞬間,伺服器會告訴客戶端你的狀態,強行把你此時的位置拉到A點,這就是也就是漂移。

場景2:

你正在補兵,突然間斷網了,你在其他玩家眼裡你會一直A那個兵,A死之後你人物就不會動了,因為你的指令發送不到伺服器,導致其他玩家接收你的指令停留在A這個兵上面。這個時候他們可以打你,因為伺服器也連接不到你,所以你不會知道他們再打你,此時就會導致玩家與玩家之間畫面是不一樣的,斷網的玩家的畫面是錯誤的畫面,這個時候你在伺服器中可能已經被打死了,恢復網路之後,客戶端接收到你已經死了,強行把你的畫面與人物狀態拉到死亡畫面。

所以你斷網的時候你的所有操作是發不出去的,而且其他玩家的操作也接受不到,但是你的狀態是在伺服器那邊,當你重新恢復網路的時候,你的狀態如果與伺服器的狀態不一樣,就會強行拉到伺服器的狀態,中間產生的時間差就是延遲。


推薦閱讀:
相关文章