2010-07-12 180 views
10

我想要構建一款基於回合的多人遊戲iPhone遊戲,需要一個遊戲服務器來連接玩家並展示世界狀態數據。我試圖瞭解遊戲服務器如何工作,以便我可以開始設計和構建它。到目前爲止,我只有在構建Web應用程序方面的經驗,所以自然我的想法是想設計遊戲服務器以與Web服務器類似的方式工作,但是可以嗎?Web服務器和遊戲服務器有什麼區別?

我在過去的工作中使用過的ASP.NET MVC Web服務器通過向服務器發送一些網頁數據的請求,服務器生成HTML或XML或JSON並將其返回給客戶端一個HTTP數據包。這個過程聽起來和多人遊戲完全一樣,除了客戶端可能不會請求HTML,但是請求XML或JSON數據是有意義的,對嗎?

所以我的問題是...

  1. 能否在遊戲服務器中使用ASP.NET MVC編寫和工作一樣使用一個RESTful API由我設計了一個Web服務器?
  2. 是否有更好的方法來請求和接收遊戲數據,而不是使用包含XML或JSON數據的HTTP數據包?從遊戲服務器返回的數據將很小。
  3. 使用一個RESTful API從Web服務器是有道理的訪問數據,但使用一個RESTful API從遊戲服務器請求的遊戲數據沒有意義,事實上,聽起來像它可能會導致安全問題,你的想法?
  4. 最後,誰可以推薦任何好的遊戲書籍,展示如何建立一個體面的遊戲服務器的例子?

非常感謝提前對你的幫助!

+1

WCF服務可能比MVC更有意義,因爲實際上沒有UI,只是數據交換。 – Jason 2010-07-12 15:13:41

+0

@Jason,謝謝!這看起來非常好。 – BeachRunnerFred 2010-07-12 15:20:11

回答

3

Web服務器是缺少一個重要的組成部分...

IE。他們是無國籍的。整個網絡平臺(以及一般的HTTP服務器)基於它們是無狀態的模式,這意味着當您從頁面切換到頁面時,它們不會保留數據。

周圍有限制的方式。在客戶端:您可以使用會話在瀏覽器打開時保存數據;或Cookie來長期存儲數據。在服務器端:數據庫通常用於長期存儲狀態。所以......

  1. 是的,但是這取決於有多少和多久你要存儲一個遊戲會話的狀態,你可能會發現,單獨運行遊戲服務器/引擎(而不是作爲一個Web服務器)將給你更多的空間在未來擴展/增長。

  2. 是的,沒有...... XML/JSON幾乎是在互聯網上傳遞對象狀態的方式,因爲它很簡單且與平臺無關。由於您可能/不會編寫自己的服務器後端,因此建議您在考慮使用XML-RPC之前考慮從頭開始編寫自己的解決方案。

  3. 我不確定你爲什麼對安全性有偏執。如果您針對可接受的請求/響應週期實施相當嚴格的訪問策略,則不應該有任何問題。就像我之前說過的,看看XML-RPC。關鍵是,不要讓用戶訪問比他們需要更多的遊戲服務器數據。

  4. 不,主要是因爲我不寫遊戲。雖然,我確實有編寫客戶機/服務器體系結構應用程序的經驗,但這不是火箭手術。我建議你看看加入Game Development Stack Exchange FAQ網站即將達到測試版。

+0

謝謝,埃文,這個XML-RPC看起來非常好。你有沒有使用任何的.NET實現?如果是的話,任何建議/建議? – BeachRunnerFred 2010-07-12 16:07:43

+0

@BeachRunnerJoe不,我沒有。我只提出了XML-RPC,因爲它是一個衆所周知的Web服務架構。如果你想開始使用它,Stack Overflow應該有大量實際使用它的人提供的信息。看到這個開始。 http://stackoverflow.com/questions/1348503/how-to-use-xmlrpc-in-c – 2010-07-12 16:29:14

8

的主要區別在於,網絡服務器產生大量使用(相對)很少或沒有狀態信息相對靜態內容。即使在使用狀態時,它通常是特定於會話或用戶。讀取比寫入要頻繁得多,所以緩存可以幫助提高吞吐量。您還可以信任Web瀏覽器以(相對)可靠的方式傳遞一些狀態數據和Cookie。

相反大部分時間來自客戶端的方式更新遊戲服務器端,保留了大量的全局狀態(所有的遊戲,玩家,狀態狀態),當他們要求將它們發送狀態更新到客戶端。緩存是不可能的,你不能相信你的客戶告訴你一天的時間 - 你必須假設他們會盡力以任何可能的方式作弊。

使用REST API是沒有這樣的問題,因爲你可以使用你已經使用標準的認證機制。

Beautiful Architecture」這本書的第3章介紹了Darkstar(now RedDwarf)項目的體系結構,該項目是用於在線遊戲和虛擬世界的可擴展應用程序服務器。雖然RedDwarf的規模比您想要的要大得多,但本書確實描述了創建遊戲服務器時需要解決的問題。

相關問題