tcp - tool - MMORPG客戶端/服務器編碼



udp receiver (6)

你不能依靠客戶傳遞真實的信息。 有人會破解協議和作弊。 加密數據不會阻止這一切 - 只是使它難以做到。

客戶端只能發送移動請求等,服務器需要檢查請求,以確保他們不違反遊戲規則。 服務器應該只發回客戶端絕對需要的數據 - 你不能依靠客戶端來獲取大量的世界數據,只是濾除了玩家目前無法觀察到的一切。 有人會獲得額外的信息並利用它。

如果遊戲需要“實時”,那麼客戶端需要假定服務器將允許移動請求並相應地更新顯示 - 如果稍後服務器糾正該移動,則回滾該移動。 在大多數情況下,客戶和服務器都會同意,一切都會順利進行。 當客戶試圖作弊時(這是他們的錯誤),或者客戶端由於連接不好而不好(對此你可以做的事情不多)。

https://src-bin.com

MMORPG客戶/服務器通信中使用的UDP和TCP協議如何?

例如:

客戶端是否通過UDP廣播(播放器位置等)到服務器? 或相反亦然?

或者更像是在客戶端請求服務器移動播放器的情況下使用TCP。 服務器收到請求,移動播放器,並發回給玩家現在在位置xyz的客戶端?

聊天頻道必須使用TCP來實現嗎?

有沒有什麼好的文章/書籍? 我發現了點點滴滴,但看起來真正的肉和土豆是從經驗中獲得的。


Answer #1

你最好的選擇可能是看看Planeshift的網絡代碼,它是一個開源的MMO。 我相信這是現場最發達的(最後一次檢查)。


Answer #2

很多遊戲使用UDP進行移動相關的活動 - 所以,就像你走路的時候,很可能會發送一堆UDP請求。 服務器仍然最終控制這是否是有效的,但你不必在乎每一個數據包是否到達服務器。 這就是為什麼很多遊戲客戶也使用某種預測機制。

就你提到的第二點而言,是的,所有的控制都是由服務器管理的。 你不希望客戶向服務器廣播任何東西, 你應該做錯誤和輸入處理服務器端,以防止黑客攻擊。 您也可能會限制每秒輸入。

無論如何,UDP和TCP的組合是合適的 - 你只需要問自己:“我想要可靠性還是速度?”


Answer #3

您可能對Darkstar項目感興趣。 這是一個開源的MMO框架。


Answer #4

我想你可以從閱讀其他人如何實現這些類型的系統中學到很多東西 。 那麼我可以向你指出Tim SweeneyThe Croquet Consortium的工作嗎?

  1. Unrea網絡架構
  2. 槌球項目

Tim Sweeney的論文改變了我對編程的想法。 我不能推薦他們。


Answer #5

有許多不同的可能的實現,但大多數情況下,他們會看起來像這樣。 遊戲世界裡幾乎所有的動作都會重複這種模式。

  1. 客戶端與服務器通信,玩家想要移動。
  2. 客戶端根據它認為應該發生的事情來顯示移動的玩家。
  3. 鑑於玩家的位置,服務器驗證移動是可能發生的事情。
  4. 服務器將客戶端更新為關於服務器所在的位置。
  5. 客戶端更新玩家位置以反映服務器的世界狀態。