網路遊戲同步方式(幀同步和狀態同步)

Tony_Xian發表於2020-12-20

在做網路遊戲的時候首先要做的是選擇一種同步方式來使用,網上的文章都是說幀同步與狀態同步的選擇,但是又經常講的模糊不清,我大概整理了一下,並且有一種我們現在專案用的網路同步方式

狀態同步

狀態同步就有好幾個說法,說是同步狀態,同步操作等,又找不到一遍文章能清楚的講一遍什麼是狀態同步。

所以大概總結一下就是,狀態同步是通過每個客戶端傳送自己的操作給伺服器,這時客戶端不進行任何動作,伺服器統一計算後並把結果同步個每一個客戶端。

這裡要點就是,同步操作,伺服器結算結果。

這裡推薦兩篇文章

http://www.cnblogs.com/sevenyuan/p/5283265.html
https://www.zhihu.com/question/36258781
這裡講了這兩種同步方式的區別,但是依然沒有很清楚。狀態同步也找不到更好的文章,如果你有的話也請在評論區分享一下一起學習。

幀同步

幀同步是在關鍵幀的時候同步操作給伺服器,伺服器轉發操作給每個客戶端。客戶端之間要接受到關鍵幀才可以進行操作。

幀同步裡面有一個關鍵技術就鎖幀,也就是如果沒有收到廣播的關鍵幀不能進行下一步操作。大家靜止不動。

而現在的遊戲會有一個聰明一點的方法叫做樂觀幀鎖定

樂觀幀鎖定通過定時傳送關鍵幀的方法,不鎖定任何客戶端,伺服器一定時間間隔就發包給每個客戶端,包裡可能是空包也有可能是你自己活著別人的操作。而客戶端就通過定時或者每當操作就發包的形式告訴伺服器自己的操作。

但不論是什麼形式的幀同步都是客戶端收到其他玩家的操作後自己模擬行為。所以這個就需要大家如果是隨機的時候要保證一致,也就是有一樣的隨機種子,而且在每個客戶端中無法保證一定一致,也就是這個原因幀同步一般會用著競技類遊戲,遊戲都是一盤一盤的來,每盤開始就給大家統一的第一幀和隨機種子,保證這個遊戲在每個客戶端中基本一致

其實在網速好的時候這些都不是問題,基本上不同客戶端上的表現基本一致。

而當網速不一致時,當你選用樂觀幀同步的話就可以保障網速好的不會被網速差的玩家卡住

幀同步有好多好文章,這裡也推薦兩篇

http://mp.weixin.qq.com/s?__biz=MzA5ODExMTkwMA==&mid=2650255562&idx=1&sn=a457e6dbf7bdd99d1e75dbf7e500dd44&scene=0#wechat_redirect?ref=myread
http://www.skywind.me/blog/archives/131
這兩篇是已經講的非常清楚,非常好的兩篇文章

所以能看到,其實在手遊時代,狀態同步基本是不可取的,伺服器壓力太大,對網路要求太高。

而幀同步的話也會選擇樂觀幀同步,保證在網速好壞不同的情況下還能一起玩,並且網速好的玩家不會受干擾。

自己遊戲的同步方式

我們是一個mmoarpg手遊,也就是動作類網遊。

由於我們的遊戲型別,其實不需要真的非常同步,並且可能有很多個玩家同屏,首先拋棄狀態同步

接著我們也不是競技類遊戲,所以基本上也不需要幀同步。

所以我們同步也就是客戶端傳送請求給伺服器,伺服器驗證一下,如果出入太大強行拉回,不然也不返回給自己客戶端,只同步位置給其他客戶端。

技能上就是客戶端請求使用技能,在技能中的打擊幀告訴伺服器這個人我能不能傷害,伺服器判斷並同步給大家這個傷害。

所以基本上算不上什麼同步方式。

但是如果我們之後需要做更為嚴肅的pvp玩法,則需要幀同步來進行操作。這個可能會在後面補充

這裡面還有很多可以一起討論的地方,也希望大家評論一下一起討論

還有一篇王者榮耀的同步技術文章

http://mp.weixin.qq.com/s/agXeHpN2vkgl5jKsLvi2Ug

轉自:https://blog.csdn.net/chrisfxs/article/details/73655934

相關文章