1.快節奏的多人遊戲 (第一部分):客戶端 - 服務器遊戲架構

英文原文地址 Fast-Paced Multiplayer (Part I): Client-Server Game Architecture

能力有限,如有錯誤,請諒解,並歡迎指正!

介紹


      本文是探索快節奏的多人遊戲系列文章的第一篇,這個系列主要有關快節奏的多人遊戲的相關技術和算法。如果您熟悉有關多人遊戲的概念,您可以安全地跳到本系列的下一篇文章 - 以下是介紹性討論。

      開發任何類型的遊戲本身都極具挑戰性, 然而,多人遊戲更是增加了一組全新的需要解決的難題。有趣的是,核心問題是人性和物理!

外掛的問題


      這一切都始於外掛。

      作爲一個遊戲開發者,您通常不關心玩家是否在單人遊戲中開掛 --他的行爲不會影響除他之外的任何人。開掛的玩家可能無法完全按照您的計劃體驗遊戲,但由於這是他們的遊戲,他們有權以任何他們喜歡的方式玩遊戲。

      然而,多人遊戲卻不同。在任何競爭遊戲中,開掛的玩家不僅僅是讓自己的體驗更好,而且還會讓其他玩家的體驗變得更糟。作爲開發者,您可能希望避免這種情況,因爲它往往會逼走您的遊戲玩家。

      有許多事情可以防止外掛,但最重要的一個(可能是唯一真正有意義的一個)很簡單:不要相信玩家。總是假設最壞的 – 玩家總會試圖作弊。

權威的服務器和愚蠢的客戶端


      這引出了一個看似簡單的解決方案 - -您可以讓遊戲中的所有內容都發生在您控制的中央服務器中,並使客戶成爲遊戲的特權觀衆。換句話說,您的遊戲客戶端將輸入(按鍵,命令)發送到服務器,服務器運行遊戲,然後將結果發送回客戶端。這通常稱爲使用權威服務器 ,因爲關於世界上發生的所有事情的唯一權威是服務器。

      當然,玩家可以利用您的服務器漏洞,但這超出了本系列文章的範圍。使用權威服務器的確可以防止各種各樣的黑客攻擊。例如,您不應該信任客戶端所告知的玩家的血量信息;因爲被黑的客戶端可以修改其值的本地副本,並告訴玩家它具有10000%的血量狀況,但服務器知道它只有10% – 當玩家受到攻擊時,它將會死亡,無論被黑客改成了什麼。

      您也不相信玩家在世界上的地位。如果你這樣做了,一個被黑的客戶端會告訴服務器 “我在(10,10)”,一秒鐘後**“ 我在(20,10) ”,可能穿過一堵牆或比其他玩家移動更快。相反,服務器知道玩家在(10,10),客戶端告訴服務器“ 我想向右移動一個方格 ”,服務器用(11,10)的新玩家位置更新其內部狀態,然後回覆玩家“ 你在(11,10) ”**:
簡單的客戶端 - 服務器交互。
      總之:遊戲狀態僅由服務器管理。客戶端將其操作發送到服務器。服務器定期更新遊戲狀態,然後將新遊戲狀態發送回客戶端,客戶端只是在屏幕上呈現它。

處理網絡


      愚蠢的客戶端方案適用於基於慢回合的遊戲,例如策略遊戲或撲克。它也適用於局域網設置,在所有實際應用中,通信都是即時的。但是,當用於通過互聯網等網絡進行快節奏的遊戲時,這會被打破。

      我們來談談物理。假設你在舊金山,連接到紐約的服務器。那是大約4,000公里,或2,500英里(大約是里斯本和莫斯科之間的距離)。沒有什麼比光更快,即便是互聯網上的字節(在較低級別是光脈衝,電纜中的電子或電磁波)。光以大約300,000 km / s的速度行進,因此穿過4,000 km需要13 ms。

      這可能聽起來非常快,但它實際上是一個非常樂觀的設置 – 它假設數據以直線路徑的光速傳播,通常卻不是這種情況。在現實生活中,數據經歷了從路由器到路由器的一系列跳轉(在網絡術語中稱爲 跳躍),其中大多數都不是在光速下進行的,路由器自身會引入一些延遲,因爲必須複製,檢查和重新路由數據包。

      爲了方便討論,我們假設從客戶端到服務器的數據需要50毫秒。這接近最佳情況 - 如果您在紐約連接到東京的服務器會發生什麼?如果出於某種原因網絡擁塞怎麼辦?延遲100,200甚至500毫秒並非聞所未聞。

      回到我們的示例,您的客戶端向服務器發送一些輸入 (“ 我按下右箭頭 ”) 。服務器在50毫秒後獲得它。假設服務器處理請求並立即發回更新的狀態。您的客戶端在50毫秒後獲得新遊戲狀態 (“ 您現在處於(1,0) ”)

      從你的角度來看,發生了什麼事情是你按下右箭頭但是沒有發生任何事情,只有十分之一秒; 然後你的角色終於向右移動了一個方格。 你的輸入與其後果之間的感知 滯後可能聽起來並不多,但它是顯而易見的 - 當然,延遲半秒不僅明顯,它實際上使遊戲無法玩了。

總結


      網絡多人遊戲非常有趣,但引入了一系列全新的挑戰。權威的服務器架構非常擅長阻止大多數作弊,但直接的實現可能會使遊戲對玩家而言反應遲鈍。

      在接下的文章中,我們將探討如何構建基於權威服務器的系統,同時最大限度地減少玩家所經歷的延遲,使其幾乎與本地或單人遊戲無法區分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章