2013-09-30 40 views
1

我在做一個多人遊戲,我常常想,以測試它是否完美的作品全球網絡上,因爲有時它只是本地工作,所以,我怎麼可以做你的客戶端服務器程序,沒有送我的客戶朋友來測試它。如何測試

+0

你想在全球網絡上測試一些東西,而不用在全球網絡上測試它? – Dukeling

+0

僅供參考,本地定義?如果你使用本地主機,你什麼都不測試 - 如果你使用主機遊戲機器的IP地址,那你就是個好主意。你甚至可以在同一臺機器上進行測試。但是,至少在本地網絡中使用兩臺機器。 – KevinDTimm

回答

0

如果你想測試它的「全球網絡」 - 你必須測試這種方式。有很多事情可能會出錯,這在本地網絡上不是問題。只是把我的頭頂部

  1. 延遲(對遊戲很重要)
  2. NAT(取決於你的遊戲架構問題的常見原因 - 更何況,如果P2P)
  3. 安全
  4. 連接錯誤( WIFI/3G間歇性喪失)
0

有跡象表明,往往是微妙的不同,當你談論在互聯網上,而不是localhost或本地網絡運行的網絡的許多方面。

  • 所有的延遲方式都可能發生,這可能會在代碼中拋出一些糟糕的假設。
  • TCP流可以通過TCP的流控制受到影響(當TCP窗口填補了發送方將停止發送和事實向你(或者,如果你正在使用異步API)的沒有舉報,)。
  • TCP讀取返回本地主機上的「完整消息」,並且您自己的網絡可能開始返回消息片斷。
  • UDP數據報可能會丟失,永遠不會到達或可能以多次或按任意順序到達。

所以你認爲你需要測試你的代碼,以處理這些極少出現在自己的網絡上的邊緣情況。您也認爲僅僅將客戶端發送給朋友或在遠程機器上運行客戶端是不夠的。

一種方法是建立一個專用的測試客戶端,發送已知的遊戲,並檢查它得到期望的響應(如何努力,這是取決於你的協議,您的遊戲)。一旦你有了這些工作,你就可以讓測試客戶有意識地發送數據,以便測試上述項目。所以,如果你使用的是UDP,你可能會在你的測試客戶端中放置一些代碼,這樣它有時根本就不用費力發送一個UDP數據報。客戶應該認爲它發送了它。網絡層只是拋棄它。這測試你的UDP協議的缺失數據報。然後多次發送一些數據報,然後發送一些無序序列等。對於TCP添加延遲,將邏輯「消息」分解爲單獨的網絡發送,它們之間有大的延遲;理想情況下,將每個不同的消息類型作爲單個字節序列發送,以檢查服務器的「消息累積代碼」是否正常工作。

一旦你做到了這一點,你需要做同樣爲您的客戶端代碼,或許是增加一個「模糊」選項,您的服務器的網絡代碼做同樣的事......

我個人傾向於試着退後一步,在專門的「單元測試」中儘可能地做到這一點(我知道有些人會說這些不是單元測試,只要把它們寫成你喜歡的名稱就可以了)。這些測試使用真正的網絡(與測試創建的虛擬服務器/客戶端交談)來鍛鍊您的網絡層,並驗證可怕的邊緣情況。