2012-09-14 95 views
3

我正在設計一款遊戲,但是這個問題適用於任何需要集羣中的節點和主服務器之間進行雙向通信的情況。我是很新的集羣,但我積極計劃在圍棋和偶爾D.D或Go羣集遊戲服務器

我真的想用現代語言(不是C/C++),所以我選擇了這兩種語言的原因是:

  • 陣列片
  • 良好的併發支持
  • 跨平臺&本地編譯(多編譯器實現)
  • GC(兩個工作在精確GC)

我讀過https://stackoverflow.com/questions/3554956/d-versus-go-comparisonThe D Programming Language for Game Development

在高層次上,我的比賽會做的大部分處理服務器端,與客戶端只是從他們的角度呈現遊戲狀態。遊戲旨在擴展,所以它需要在羣集中進行操作。組件大部分是CPU綁定的,並且異步地更新到主服務器,這與客戶端共享遊戲狀態。大多數計算取決於用戶輸入,因此這些事件需要發送到各個組件(因此是雙向RPC)。

的原因,我喜歡d:

  • 手冊內存管理
  • 模板/ CTFE
  • 代碼的安全性(@safe,合同,輸入/輸出)

的原因,我喜歡去:

  • 標準庫(pprofRPC
  • Go例程
  • go工具(特別是, go get -u安裝/更新遠程依賴項)

客戶端可能會寫入D,但這不應該對服務器產生影響。

我傾向於D,因爲手動內存管理被烘焙到語言中。雖然它沒有RPC的漂亮庫,但我理論上可以實現這一點,但我無法在Go中優雅地實現手動內存管理。

鑑於兩種語言之間的選擇,你會用哪種方法解決這個問題?

+1

真的沒關係。選擇一個你更喜歡的,並開始編碼! –

+1

@BrendanLong - 這是問題的一部分,我喜歡他們兩個!我只是尋找一些指導,以這種或那種方式推動我,最好來自具有集羣/遊戲設計經驗的人。 – tjameson

+1

儘管這個問題並沒有真正的建設性(通過本網站的定義),但它的制定很好,可以看出作者花費了大量的精力來研究這個領域,所以它很值得閱讀。榮譽。 – kostix

回答

5

我希望,要麼將工作和很多這取決於你更喜歡哪個,但如果你正在做的客戶端d,我建議做在d服務器只是因爲當時有參與較少的語言。如果你使用兩種語言,那麼任何在你的項目上工作的人通常都必須知道他們兩個,並且Go和D在他們的用戶基礎上足夠小,以至於幾乎沒有人會知道這兩種語言 - 儘管如果這只是你的工作它,你顯然已經知道他們兩人了。

但是,我會指出,如果使用D的問題是缺少RPC庫,那麼這不是問題,因爲D由Apache Thrift支持。因此,D does有一個穩固的RPC庫,即使它不在其標準庫中(事實上,這是D第一輪參與Google的Summer of Code的成果之一)。

+0

是的,我看到了Thrift,但我不知道它是否跨網絡工作(它看起來像頂級語言之間的粘連)。我認爲這可能會回答我的問題。 – tjameson

0

我對你的遊戲一無所知,如果你的服務器很好的併發性很重要,那麼我投票選擇Go。

我在Go開發了通信服務器,實現與PUSH技術的通信。 Go非常擅長這樣的任務。簡潔易懂的簡潔代碼。

自動內存在併發應用中很重要。

客戶端應用程序不像服務器應用程序那樣併發。 客戶端應用應該保持高幀率。

因此,沒有全局GC鎖的手動內存管理對客戶端應用程序更好。