2011-01-07 107 views
4

我正在考慮編寫一個基於服務器的遊戲,並且有幾個客戶端程序連接到它。遊戲(非常)基本上由用戶可以「接受」的項目列表組成,這些項目將從所有連接的計算機的列表中刪除它(這需要非常快速地更新)。編寫基於客戶端 - 服務器的遊戲的建議

我正在考慮爲客戶端使用Java applet,因爲我希望這是可移植的,並且可以從瀏覽器(主要在Windows)中運行,並且可以更快速地更新,並且可以運行C++或Java服務器Linux(目前只是一個家庭服務器,但可能會使用VPS)。

這個遊戲的前一個'化身'在瀏覽器中運行,並且使用PHP + mySQL作爲後端,但是當幾個人連接時(這與大約8人有關,這最終需要以處理更多)。
用戶可能都在同一個物理位置(具有相同的公共IP地址),並且系統每秒會得到幾個請求,所有這些都需要將列表發送回客戶端。

有些計算機可能對它們有防火牆限制,因此您會推薦使用HTTP通信,自定義端口還是通過SSH或某些現有協議?

任何人都可以提供一些提示(線程,一個項目的多個請求?),工具,數據庫(mySQL?)或API,這將幫助我開始這個項目?我更喜歡C++作爲後端,因爲它會更快,但使用Java將允許我重用代碼。

謝謝!

回答

2

對於任何想爲C++提供良好網絡API的人,我總是建議Boost.Asio。它具有與平臺無關的優點,因此您可以編譯用於Linux,Windows等的服務器。但是,如果您不太熟悉C++模板/ boost,則代碼可能會有點過分。看看,試試看。

就一般建議而言。鑑於上面的描述,你似乎需要一個相對簡單的服務器。我建議保持它非常基本,單線程輪詢循環。從連接的客戶端讀取消息(等待多個套接字),然後進行適當的響應。這消除了多次訪問您的列表和其他同步問題的任何問題。

我也許還建議,在你重寫你的初始化身之前。嘗試改進它,如你所說:

和系統會得到每秒幾個請求,所有這些都需要發送列表回到客戶端。

由於每個請求從列表中移除的項目,爲什麼不直接告訴你的用途哪個項目被刪除,而不是一遍又一遍的網絡時間和時間發送整個列表?如果這個列表的大小很大,這個小小的改變會帶來很大的改進。

+0

我會看看Boost,謝謝。舊版本的問題是我無法完成推送,所以我使用了輪詢,並在請求中填充了Apache。 – neuropie 2011-01-07 17:29:32

+0

此外,你會建議有一個線程循環爲每個客戶端,或爲他們所有? – neuropie 2011-01-07 17:32:35

3

因爲速度本身,我不會使用C++。性能差異不太可能會對你的遊戲產生真正的影響。 (除非在客戶端和服務器之間有10 GigE,否則您的網絡可能會影響性能差異)我會使用C++或Java,因爲您將首先使用該語言來使用它。

相關問題