2017-11-17 203 views
1

我剛開始嘗試使用NodeJS和socket.io創建一個簡單的多人在線遊戲(與在線國際象棋類似的想法)。我很抱歉,如果我的問題的答案真的很明顯,因爲我試着用google搜索,但我認爲我錯過了一些關鍵的理解。在NodeJS中存儲臨時變量

基本上,我需要在應用程序運行時在服務器上存儲一些東西。例如:

  • 我需要存儲哪些套接字連接是主機,哪些是播放器。
  • 我需要存儲每個遊戲的當前狀態(例如在國際象棋中,棋子的位置以及棋子的位置)
  • 能夠存儲所有socket.io文件也是很好的「房間」。

請隨時回答此問題,以下信息僅供參考。

有跡象表明,我曾嘗試或在網上看到幾件事情:

  • 當我谷歌的東西與「持久性」,我得到基於保存到數據庫什麼的結果,我不認爲這就是我要的。
  • 我試過在NodeJS文件的頂部添加變量,就像我在普通的JS文件中使用全局變量一樣。這似乎工作,但只是感覺錯了,如果有人可以解釋如何運作,這將是偉大的。
  • 我也看到了所謂的會話變量,我想這可能是我想要的。
  • 我見過的應用程序只是通過在客戶端和服務器之間傳遞信息來實現這一點,但我更希望客戶端不能只編輯信息來「破解」遊戲。

任何幫助或解釋讚賞。

+2

通常當人們談論持久性或會話時,他們希望在應用程序的生命週期之外持續存在的事物。在運行時存儲應用程序所需的數據正是變量的用途。在Node中,頂級變量是模塊本地的(即文件),因此污染全局空間不是問題。沒有具體細節,很難給出更好的答案。 –

+0

感謝您的回答,真的很有幫助。 – Zack

回答

1

保存到數據庫沒有錯。如果您的服務器在幾秒鐘後崩潰並重新啓動,您並不希望每個人的數據都被刪除。我想你正在考慮數據庫總是長期和緩慢的方式。但是真的,這種類型的事物有很好的數據庫技術,並且經常與socket.io一起使用。

我可能會選擇的那個是Redis,這是超快速的,並將數據存儲在內存中。這意味着它不會不斷地寫入磁盤,而且在像MySQL一樣擁有完全持久性存儲空間和通過變量將其保存在節點內存中的方法稍微有點方便之間,它還有點半途而廢。

當reddit創建「Place」時,他們使用Redis和Cassandra一起使用Redis和Cassandra進行大規模多人繪製。 You can read a bit about it here