2017-02-13 24 views
1

我正在開發基於回合的遊戲,其中包含大量信息在Node之間存儲的NodeJS和Socket.io。NodeJS在使用網絡套接字時存儲數據時可能獲得最佳性能

我想知道什麼是最好的方法來處理可以說,成千上萬的用戶。

目前我使用全局變量來存儲與比賽以「決鬥」的全局變量的鍵是動態創建的房間的一切:

duels[room].character_1 = character_1; 
duels[room].character_opponent_1 = character_opponent_1; 
duels[room].player_1_moves = {//really big object}; 
duels[room].player_2_moves = {//really big object}; 

我不知道這是否是一個處理數千用戶的最佳方式。至少記憶明智。

我見過的其他2個選項:

1:使用會話變量來存儲數據,但是這在我看來,會佔用大量的服務器(RAM)的內存,什麼更好的全局變量或會話?或者他們都很糟糕?

第二:我使用MongoDB的,它是一個可行的選擇,以插入和我的數據庫不斷獲取信息,並將它存儲在那裏?我有一種感覺,如果我發送太多的查詢到我的數據庫它會崩潰。

基本上,在這一點上,我不知道在哪裏存儲所有這些信息,而不會冒我的服務器性能。我願意接受任何方法。

+0

標題似乎有點曖昧,但想不到在內存中一個更好的 –

+1

離開你的數據將可能給你最好的表現。如果在內存中保存的數據過多或者需要保留數據,則可能需要數據庫。 – SimpleJ

回答

1

當性能優化純粹,內存始終是最好的表現,只要你有足夠的內存爲你正在嘗試做的,只要你是不是要共享多個服務器實例之間的數據(如集羣)。

因此,它實際上只是歸結爲多少內存,你每用戶有多少用戶,你真的需要支持消費。而且,您可以在服務器進程中輕鬆使用那麼多內存而不會造成任何問題。由於您沒有提供任何內存使用指標供我們評論,所以您必須對此進行衡量和決定。

,你不提,將與node.js的集羣工作的另一種選擇是使用一個單獨的進程redis的存儲/檢索數據。 redis是內存中的存儲,但由於它位於另一個進程中,因此可以從多個進程訪問它(它與node.js集羣兼容),並將RAM存儲使用從node.js進程中移出。您仍然需要在服務器中擁有足夠的RAM以避免出現問題,但將存儲從node.js進程中取出可以提高node.js本身的性能(垃圾收集的內容更少),並且可以讓您更有效地使用服務器的所有RAM資源。

相關問題