2012-07-16 97 views
1

我開始讓我的2D遊戲/引擎,但不知道最好的線程架構,以處理在服務器端的客戶端。線程架構,遊戲服務器

起初,我在想一個主題,每個地圖的設計,而不是一個線程每個用戶。但是還有另一種理想的方法?

在我的概念地圖線程,該線程將只在地圖上的播放器的入口被創建,它倒空後,很快就會被破壞。但有了這個概念,玩家數量過多的地圖(例如玩家商店)可能會導致嚴重滯後。

隨着用戶線程化方法,將有螺紋的高數量的 - 並且因此,存儲器的高分配。

那麼,這是另一種更好的方法來做到這一點?

+1

也許一個服務器範圍的線程池映射到更多的用戶使用更多的線程,而不是映射很少的線程。 – lesderid 2012-07-16 15:07:56

+3

嘗試將你的遊戲邏輯重寫爲狀態機的某些東西,在這裏你可以調用'map.Step()'從任何線程前進它。然後,您可以很容易地在使用線程池,固定數量的線程或甚至單個線程之間切換。 – 2012-07-16 15:12:06

+0

Cory'+1'將你的遊戲邏輯改寫成狀態機的東西' - 稍微複雜一點,但你需要這種複雜應用程序的靈活性。 – 2012-07-16 15:19:24

回答

1

回答你的問題是隻使用一個線程來模擬許多遊戲實例。由於遊戲編程的複雜性以及以任何有意義/安全/有益的方式劃分存儲器訪問的困難,因此很少有遊戲從多線程中受益的情況。即使是你聽說過的最大遊戲的服務器都是單線程的,可以用於整個遊戲邏輯。例如暗黑破壞神式的遊戲每個核心有1個線程,並且每個線程負責數百個遊戲,並有十幾個微小的跨線程(真正的跨機器)邏輯用於旋轉游戲。

1

你會從mulithreading弓當你的服務器有多個CPU內核的一些好處。所以如果你的遊戲拱是純粹的事件驅動的(你永遠不會等待事件處理程序中的任何東西),那麼最好的性能就是線程數等於CPU核心數。