muduo網路程式庫使用心得

來源:互聯網
上載者:User

上個月看了朋友推薦的mudo網路程式庫,下完代碼得知是國內同行的開源作品,甚是敬佩。下了mudo使用手冊和035版的代碼看了下結構,感覺是一個比較成熟而且方便使用的網路程式庫。本人手頭也有自己的網路程式庫,雖然不敢說是一個多強大的網路程式庫,但畢竟在外網也穩定運營了幾年,多組同時線上也跑過30w左右,單組伺服器也能跑上w人。做遊戲伺服器幾年的經驗,感覺穩定性才是網遊伺服器最核心最重要的環節,效率還在其次,這也是目前網遊伺服器普遍採用分組架構決定的,從運營的角度來看,有時候一組伺服器即使上限能跑上w人,但運營會強制把上限定位幾k人,這裡面跟遊戲玩法還有運營的手段有關係,就不細說了! 
muduo採用的是基於訊息回調機制的reactor模式,這也是目前網路程式庫常用的模式。整個網路程式庫的使用比較方便,只需要關心幾個tcp事件:tcp串連,收資料,tcp關閉等,這幾個事件分別註冊好回呼函數就可以簡單使用。詳細的使用方法看 陳碩的muduo網路程式庫使用手冊就可以。
      如果要把muduo結合到一般的遊戲伺服器裡面,則最基本的還需要加入組包和打包,如果是對外通訊則還需要加解密模組。參考的方法如下:
第一步,需要定義一個 gameserver這樣的基類,該類負責做為遊戲tcp服務端(不管是閘道伺服器或者邏輯伺服器都等都可能需要使用tcp服務端),所以必須包含tcpserver,並把tcp的接受串連和收資料,關閉串連等事件註冊到tcpserver的回調。
第二步:當tcp串連回調onconnection之後,需要new一個新的logicsession(該logicsession就是負責處理資料群組包和加解密,訊息佇列等的類),可以建立一個tcpconnection指標到logicsession的映射。 當tcp串連回調onmessage之後,根據tcpconnection索引值找到logicsession,把資料push到logicsession類
      第三步: logicsession收到資料後,需要定義一個訊息佇列類,例如msgqueqe類,負責把收到的位元據解密組包等操作,並且把組好的包存放到訊息佇列中,以供之後的遊戲邏輯使用。
    完成了以上幾步之後,可以開始幹活了。例如要建立一個遊戲網關,則只需要定義一個clientserver類繼承gameserver(定義clientserver的原因是因為每個tcp服務所要做的事情可能都不一樣,所以需要根據自身需求實現自己的子類,例如遊戲網關肯定是要統計串連人數等,則需要在clientserver中暴露擷取logicsession個數的介面),並new一個clientserver傳入連接埠,例如連接埠20000,則開始偵聽來自20000連接埠的tcp串連,接收到串連資料後,自動由logicsession處理並儲存到每個串連自己的訊息佇列中。如果遊戲伺服器邏輯是單線程的,則接著只需要啟動一個線程遍曆所有來自20000連接埠的logicsession,並且把每個logicsession的訊息佇列pop出來,並且分發到相應的訊息處理模組統一處理。這樣就可以完成一次簡單的從用戶端到遊戲網關的tcp資料收發和處理。

(未完,待續)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.