2011-09-29 76 views
3

我希望你能幫助我,或者至少讓我指向方向。 所有的東西都在c#中編程,但客戶端應用程序可以用任何語言,只需要知道用於與服務器通信的tcp協議。從多人遊戲中獲取數據庫結果

我做了一個服務器應用程序,其中包括一個大廳和一個遊戲服務器。您可以根據需要安裝儘可能多的遊戲服務器(實際上,我有三個,只是爲了測試,每個遊戲都有不同類型的遊戲)。

客戶端應用程序連接到大廳進行身份驗證,nd其他小東西,並請求遊戲......在此之後,它被重定向到合適的遊戲服務器。

遊戲過程中處理的所有信息,統計數據,聊天記錄......都保存在PostgreSQL數據庫中(您可以對此進行配置以使用MySQL,MS SQL)。現在

,球員想提出一些疑問,讓過去信息有關自理,或統計數據,或任何...我的問題是:

¿我要保持球員直接查詢數據庫,我的意思是獲得數據庫服務器的結果(發送相應的sotre過程命令以獲得結果)?

或(由於他們保持積極的活着的大廳服務器通過套接字(和anothers與遊戲服務器)連接)

¿難道我收到的請求,並通過大廳服務器使用永久發送的每個查詢的結果活動連接套接字?

¿哪一個是最高性能甚至是安全的?或¿你會推薦另一個建議嗎?

很高興地說,在所有遊戲服務器上都會有5.000-10,000個併發連接,甚至更多。


.-我忘記提及某些查詢可能有很大的結果,我的意思是500/2000條記錄(行)有一些列。 .-忘了說我正在考慮通過套接字設置查詢,處理和打包服務器中的查詢並將結果發送給播放器(一個或多個)壓縮(壓縮)。

在此先感謝

E/R

+0

我覺得沒有這樣的ambiguety ...對我來說是一個真正的問題...我只是想知道一些建議,實際上已經給了一些不錯的人...謝謝 – camel

回答

2

您應該絕對不會有玩家客戶端直接提交查詢您的數據庫服務器;你的遊戲服務器應該有自己的協議來處理客戶提交的查詢,而'遊戲查詢服務器'應該在構建實際的SQL之前對這些查詢進行合理檢查。

儘管如此,在任何情況下都不應該直接從用戶提交的信息構建查詢。

+0

+1,此外他不應該同時返回500/2000條記錄。什麼用途?用戶不太可能瀏覽所有內容。發送分頁結果。 – jgauffin

0

最安全的是用戶不知道SQL-Server的解決方案,也就是大廳服務器處理所有連接和通信的位置(假設在任一服務器上都沒有可利用的錯誤)。此外,您還可以更好地控制安全實施,讓一個用戶(大廳服務器)(最有可能位於同一個域中)完全被讀取並執行權限,以便只准許他擁有這些權限的數據庫。性能<安全性,因此關於性能的問題實際上並不重要,但是性能實際上也是您實施的問題。