2010-03-01 35 views
0

我正在開發多人iPhone應用程序,允許多達6個用戶「實時」連接和玩遊戲。我一直在尋找託管和非託管套接字服務器(SmartFox,ElectroServer,Photon/Neutron,ProjectDarkstar),我想知道如果任何人有任何建議的服務或實施?任何人都知道Zynga的Live Poker用於這種類型的功能或您需要什麼類型的硬件?用於iPhone應用程序的多人遊戲服務器,使用設備作爲套接字服務器

一些小問題:

  1. 遊戲是回合制。使用AMF和輪詢服務器還是應該使用基於套接字的路由更合理?我目前的擔心是併發連接限制和託管成本。

  2. 是否可以將設備「廣播」爲套接字服務器?即一旦我連接了所有我的播放器,我是否可以分配6個設備中的一個作爲套接字服務器,並通過該設備推送所有通信?那會瘋了嗎?這將解決併發問題,我只需要依靠套接字服務器服務作爲初始連接的大廳。分配的用戶將保持連接以促進遊戲到服務器的通信。

+0

你打算讓人們通過本地網絡(藍牙或WiFi)或通過互聯網進行遊戲嗎?如果前者是這種情況,你有沒有考慮過使用GameKit? – Felixyz 2010-03-02 02:34:21

+0

兩者。我將使用GameKit進行設備到設備的播放,但我也想支持在互聯網功能上「查找遊戲」。 – typeoneerror 2010-03-02 02:36:54

回答

2

1.

它更容易使用輪詢,並且由於遊戲是基於轉,你可以在一個相對緩慢的速度(可能是幾秒鐘),這意味着電池消耗更少的輪詢。也就是說,使用套接字或持久的HTTP連接將是一種更簡單的方式(以及更多的工作)。這兩個問題可能會感興趣:

How do I create a chat server that is not driven by polling?

COMET (server push to client) on iPhone

我不知道爲什麼你會使用AMF。爲什麼不使用JSON?或者也許HessianKit

2. 將其中一臺設備指定爲服務器很有意義。擁有需要同步的完全分散的遊戲客戶端網絡是一項非常艱鉅的任務。同樣,由於您的遊戲是基於回合的,不需要完美的實時同步,因此您不必擔心集中狀態會引入更多延遲。

如果您打算讓用戶通過本地網絡進行遊戲,您應該考慮使用GameKit。

+0

在#2上。有關如何開始這樣做的任何資源?我一直在檢查我們的RakNet(http://www.jenkinssoftware.com/),並認爲這可能會起作用,但我遠離C專家,所以我不確定這是否可以實現。感謝您的洞察力。 – typeoneerror 2010-03-02 03:14:04

+1

也許這可能比你想象的更簡單。你可能不需要一個完整的遊戲網絡庫。我會這樣做的方式是編程應用程序,以便輸入和邏輯和屏幕表示完全分開。然後寫一個愚蠢地模仿第二個玩家控制的虛擬共同玩家類。當它工作時,插入GameKit以從該層獲得實際的控制事件。運行時,使用Google App Engine編寫服務器並使用輪詢來獲取狀態更新。同樣,這應該只與你的代碼中傳入輸入事件的部分接口。 – Felixyz 2010-03-02 03:52:27

+0

至於使其中一個設備成爲服務器,您可以在建立連接時任意決定哪個服務器是服務器(也許是首先播放的服務器)。所有其他設備都不會響應用戶事件(除了突出顯示按鈕之類的簡單內容)更新它們的接口,而是將它們發送到服務器,然後獲取導致接口更新的事件對象。不要試圖讓每個設備更新它自己的狀態。 (這在實時遊戲中通常是必需的,但很難實現。) – Felixyz 2010-03-02 03:58:38

相關問題