1. 程式人生 > >服務器開發-糾正之前的錯誤

服務器開發-糾正之前的錯誤

文件操作 簡單的 ron 沒有 com 暫時 分享圖片 結構 重新

最近一陣子沒有更新Egret客戶端的博客。這裏要解釋一下,是因為最近在忙著重寫服務器。

為什麽說是重寫呢?之前封裝了一個websocket的中間件,已經可以實現基本的ws通信了。但是最近和遊戲那邊的同事交流中發現之前對遊戲服務器開發的認知錯誤。

錯誤有以下幾點

  1. 服務器邏輯是單線程的。單線程邏輯更加簡單,理論上不會出現數據錯誤問題
  2. 服務器邏輯是順序執行的。意思就是每個客戶端的請求必須按順序去執行,不然會出現客戶端處理混亂的情況

了解到這些之後,我重新設計了一下服務器的“架構” ,或許算不上架構,我就是怎麽簡單怎麽搞。

這幾天我做了以下幾點:

  1. 寫了一個簡單的服務器主循環的結構
  2. 寫了一個簡單Ws連接異步處理,並拋給主循環處理邏輯和處理主循環發給前端的數據包
  3. 封裝了一個簡單的協議格式和做了一個簡單的邏輯處理的結構
  4. 實現了基本的玩家和Ws的綁定,並做是用Attribute做了簡單的身份驗證,緩存了反射結果,提高了性能

差不多就是這些,看起來不多,但是對於第一次摸索著寫遊戲服務器的人來說,還是很費時間的。

最近收獲:發現遊戲服務器邏輯基本都是單線程(第一次覺得CPU性能這麽強勁。。),數據庫查詢,文件操作等耗時的內容都是在異步線程處理。處理完成後,不能再異步線程操作主循環的數據。必須把查詢處理的數據拋給主循環的隊列,然後由主循環的線程來處理。一般這樣的才能保證遊戲服務器數據不錯亂和性能兼顧。

網上關於遊戲服務器開發的具體細節的文章太少了。感覺遊戲服務器開發的程序員都不怎麽寫博客啊。。。

最後感謝坐我隔壁位的隔壁的東北老鐵。我的每個問題都很仔細的給我做了解答,還給我翻出C++的代碼看(雖然我看不大懂C++)。。。一段時間的交流下來,我現在口頭禪都變成了:老鐵,沒毛病,雙擊666。。

最後東北老鐵給我說其實快手的那種老鐵666都是誇張了。。。

好了,就這樣,服務器代碼暫時不發出來,因為我發現還有很多完善的地方。後面能完成的跑出一個鬥地主聯網的遊戲之後,我會發出來的。

最後希望有大兄弟能指出我的問題。

老鐵,沒毛病


技術分享圖片

服務器開發-糾正之前的錯誤