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

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

爲何說是重寫呢?以前封裝了一個websocket的中間件,已經能夠實現基本的ws通訊了。可是最近和遊戲那邊的同事交流中發現以前對遊戲服務器開發的認知錯誤。程序員

錯誤有如下幾點web

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

瞭解到這些以後,我從新設計了一下服務器的「架構」 ,或許算不上架構,我就是怎麼簡單怎麼搞。數據庫

這幾天我作了如下幾點:緩存

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

差很少就是這些,看起來很少,可是對於第一次摸索着寫遊戲服務器的人來講,仍是很費時間的。服務器

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

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

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

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

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

最後但願有大兄弟能指出個人問題。

老鐵,沒毛病


相關文章
相關標籤/搜索