我目前正在開發遊戲服務器部分(MMORPG),而且我對一個看起來很重要的觀點感到困惑:如何管理客戶端及其邏輯接收的數據包?管理世界服務器上的玩家
讓我解釋一下:我知道如何從客戶端獲得連接,如何存儲此客戶端的套接字,但我不知道如何管理稍後將發送的數據包並將修改應用到服務器上全部是異步的)。
我曾想過2個解決方案:
1)只要服務器檢測到客戶端的連接,它爲客戶端創建一個線程。所以每個客戶端有一個線程可以處理單個客戶端的數據包。但在這種情況下,有更多的客戶,更多的處理器將被稱爲正確的?
2)只要服務器檢測到新客戶端,就將其存儲在列表中。線程將在客戶端列表上循環,看看當前客戶端是否正在發送數據包。如果是這樣,它管理它。但是這個解決方案也帶來了一個問題:如何管理這個數據包?創建一個專門用於這個數據包的新線程?但是我回到起點:太多數據包會使機器過載。
一位朋友向我提供了第三種解決方案:將兩者混合。這樣,一個線程會處理NB_MAX_CLIENT。
我想知道是否有其他方式做到這一點。 我在Windows上。我用C++開發Visual Studio,並使用Winsocks。
在此先感謝和抱歉我的英語不好。
我會說讓它爲5個客戶端工作,不要再擔心。你將面臨比打開太多線程更大的問題。您將能夠回來並使其更好地擴展,但如果您在擴展方面遇到太多問題,您可能永遠不會有需要擴展的項目。 – Guvante
延遲是一個問題嗎?如果不是,您可以使用MySQL來存儲數據,並使用分佈式控制來處理信息,使用多個虛擬機,因爲這是在雲服務上使用的東西,如果延遲是一個問題,那麼您確實需要在單個工作服務器上最大化資源並在可用節點上分配工作,使用單臺服務器告訴客戶端在任何可用工作節點「滿」時連接到哪裏 –