《點兵三國》遊戲伺服器上線遇到的一些問題

2022-08-10 03:09:09 字數 2104 閱讀 5092

最近比較忙,乙個人做遊戲伺服器真的好累,主要是雜七雜八的事情太多,不過還是要抽點時間出來總結下:

一,剛開始和前端協商好的戰鬥機制就是,前端處理邏輯,伺服器僅僅**,而且不開房間執行緒,也就是說a,b兩玩家對戰,**戰鬥資訊是由各自的玩家執行緒去

操作,這樣做法效率會比較高,不需要開個房間來專門**他們的資料,也比較省流量。但是弊端也很明顯,一旦乙個玩家掉線了,重連回來的時候,就要依賴

另乙個玩家恢復戰場資料,而且移動端的網路很不穩定的情況,問題就會很複雜,客戶端做起斷線重連,恢復戰場就很麻煩,因此現在的戰鬥問題還是比較多,

丟包或者延遲都會影響到戰鬥流程,又不知道哪個乙個客戶端才是正確的。而且如果想擴充套件做到**戰場,沒有房間的概念,很難做。

優化措施:每一場戰鬥給ab玩家開乙個房間執行緒,如果伺服器不想參與戰鬥邏輯計算裡面去,ab除了每操作一步把資訊發到房間,由房間來**,還隔一段時間就

把場上狀態發給房間,房間執行緒會存起來這個資料,和客戶端商議多長時間同步一次,一些關鍵的操作由伺服器來控制,例如切換回合,斷線重連,戰場資料恢復,

這種做法會比較耗流量。

二,後台在發郵件的時候,發錯了,不小心給全服玩家發了50w元寶,我勒個擦,6千玩家,相當於發了3億rmb!!!還好剛發完就發現了。

處理方法:

1.立即kill掉遊戲節點,以防玩家資料回寫資料庫,因為我們機制是,玩家下線時會回寫資料庫,或者每5分鐘回寫一次資料。

2.把全服玩家的這型別郵件從資料庫裡全刪掉。

3.查詢全服玩家,元寶大於50w的,基本都是好精明的玩家,領了郵件就立即退出遊戲,儲存到資料庫了,查詢到總共有2個這樣的玩家,然後把他們的元寶扣除

元寶。最後,確保沒什麼問題了,再重啟伺服器,真的好驚險,嚇出一聲冷汗!!!

青銅段位的某些玩家一旦匹配到該玩家,就無法正常進入戰鬥了。

處理方法:

因為匹配列表的玩家資料都是依賴玩家點選退出匹配按鈕,或者直接退出遊戲或者掉線的時候,伺服器操作匹配執行緒,從匹配列表刪除該玩家資料,但是或許還有一些比較

特殊的原因導致,伺服器操作不成功,或者客戶端通知不成功。所以需要在玩家查詢匹配的時候,一旦遇到某個殭屍玩家,再通知執行緒去刪除這個殭屍玩家,確保萬無一失,

外服網路環境比較複雜,很多東西可能不是按照套路來出牌,所以在一些資料使用的時候必須判斷一下合法性,並且在不合法的時候,還要有乙個合理的解決方案。

四,開新服的問題,剛開始我們是想著做大世界的伺服器,結果運營商那邊要開新服,本來開新服沒什麼,但是遇到兩個問題

1.我們團隊是沒有專門做http後台的人員,所以當初的充值,都是遊戲伺服器直接寫的url充值**,而且是針對第乙個遊戲服的ip位址寫的url,渠道包那邊只會給我們配乙個

充值**url,所以我們要開新服,充值位址肯定是會變化的,但是所有的渠道包都只配了我們第乙個服的充值url。

按常理來說,如果有後台http,這些都不需要遊戲伺服器去處理的,因為渠道只管配乙個我們後台的http充值位址,然後後台那邊根據這個url位址裡的透傳引數是哪個服,然後再

路由到具體各個遊戲伺服器,譬如:

透傳引數是1,  

透傳引數是2,

然而,我們並沒有後台,沒法自己寫了個rpc:call的**,將第乙個遊戲伺服器同時也作為乙個充值彙總點,渠道包所有的充值,先跑到他們配的那url**,即第乙個遊戲伺服器,然後

根據透傳引數,確定充值的是第幾個伺服器然後再rpc:call 遠端連線到目標伺服器進行充值,真可謂是分布式充值啊,以後哪個伺服器都能單獨停,唯獨第乙個伺服器不行,因為其他服

務器都得依靠它。

五,開新服的時候得注意,當初設計的一些全域性程序,因為剛開始是按照大世界的伺服器來設計,為了應付分布式節點因此很多程序是global的形式,做分服的時候就會出現資料紊亂,後面全改為local了。

總得來說,還算基本順利,伺服器沒試過宕機,效能消耗極低,cpu平均利用率不到1%,峰值也就8.9%,而且我們是12核,算下來是很低的了,記憶體利用率不到3%,而且這個linux機子裡面開了

兩個對外遊戲服,兩個內部測試服。

最後,必須注意的一點是,遊戲上線在即,伺服器配置人員最基本需要2+1, 即2個伺服器開發(主程負責開服,效能,處理線上問題,小弟負責後續邏輯開發,找bug),還要1個後台,做充值,統計資料等等。

我就是招人時太不堅定了,導致遊戲上線都還是乙個人,累成狗,主要還是雜七雜八事情太多,容易遺忘!

遊戲伺服器架構的思考

時間總是在不經意的時候就流走了,突然回想我已經做了四年遊戲開發,經歷了幾個遊戲專案,以前專案中的遊戲伺服器框架都不是我心中理想的框架,雖然不知道是不是我見識還不夠。下面記錄下我對遊戲伺服器架構的簡單思考。好的遊戲框架可以提高開發效率,節省人力成本。首先最簡單的伺服器框架,那就是只要乙個閘道器和乙個遊...

整理的遊戲伺服器架構資料

文章一 猜想的qq遊戲伺服器架構 文章出處 一種經典網遊伺服器架構 這個圖是乙個區的架構圖,所有區的架構是一樣的。上面虛線框的servergroup和旁邊方框內的架構一樣。圖上的所有x n的伺服器,都是多台一起的。紅線,綠線,和藍線圖上也有圖示,這裡就不多介紹了。關於agent server大家也能...

遊戲伺服器的若干關鍵模組

乙個 或一組 完備的伺服器程式,除了具備良好的架構外,各個關鍵模組決定了乙個伺服器的命運。對於乙個系統的理解因人而異,下面所列的內容僅僅是一些條目,在您的系統中可能乙個模組是由下面數個條目構成的。1 資源及記憶體管理模組。無需多說,一切都是資源 你的資料都在記憶體中。通常對於乙個伺服器來說為了穩定執...