關於棋牌類服務端架構的一點思考
阿新 • • 發佈:2019-02-06
公司的服務端架構可能有點問題···有些敏感資料都存放在客戶端這樣很危險。··
敏感資料:
玩家金錢,遊戲中的加減錢,遊戲結算的加減錢,玩家的牌的邏輯資料,玩家傳送的命令。
這些資料都必須經過服務端的校驗才能轉發給其他客戶端。
目前的架構來說存在安全隱患,這樣做雖然能減輕伺服器壓力,但是以後肯定修改起來相當麻煩,安全漏洞太嚴重。
個人認為,理想的伺服器架構是:當玩家進入同1桌開戰時候,伺服器應該儲存有客戶端的邏輯記憶體,包括玩家牌的邏輯資料,服務端做校驗的演算法記憶體應該和客戶端的演算法記憶體是一樣的,這樣可以防止因為單個客戶端的非法修改引起同1桌內其他玩家資料錯亂。玩家唯一能做的事就是給伺服器傳送命令,而不是和其他同一桌客戶端進行轉發記憶體的通訊(斷線重連時候,重連玩家可以從伺服器上獲得1份正確的記憶體塊)
資料庫非法斷鏈,服務端異常關閉引起的問題會導致玩家資料丟失。這個我覺得可以先寫個類似LOG的程式解決,絕不能將玩家加減錢的資訊存在記憶體中,理想的狀態應該是記錄LOG,然後從LOG 1次掃入資料庫內,既高效又省時。
資料通訊:IOCP確實很高效,但是有時候會因為某些遊戲的外掛引起遊戲通訊問題,具體表現為記憶體衝突和埠衝突,不知道為什麼有些遊戲外掛會影響埠。
對於看牌器這類的外掛,我覺得一般很難防止,總不可能連玩家可否出牌的判斷都交給伺服器去做,那樣影響體驗。再牛B的遊戲也會有出外掛的那1天。唯一能做的就是加密比解密的更牛B才行。
服務端的擴充套件性設計問題,···增加任務系統,增加排名系統,增加其他第3方擴充套件。其實還是資料和通訊的事