聽到有人說過MINA中ioBuffer比Netty中的bytebuff好用,MINA多簡單啊,直接就可以使用,Netty中要經過上下文的ctx.alloc出來,這點我是不太認同的。至於遊戲開發的網絡層是打算本身寫,仍是用現成的網絡框架其實仁者見仁智者見智!這個並不作什麼討論。網絡
對於兩個框架的比較並不談過於深刻的,只是一個表層抽象之間的邏輯區分形成的差異,以及從這點來看Netty是比MINA有優點的。框架
咱們能夠類比的看一下MINA的上層抽象邏輯,實際上是將IO(input和output)作了統一的抽象,IOHandler,IOSession,IOFilter,IOBuffer等等函數
然而Netty在上層抽象的邏輯顯然和MINA有了區別,他是將IO分開來進行抽象的,inputstream,outputstream流的區別,根據上下文關係來確立bytebuff的所屬關係和邏輯用意,而且提供了逐層傳遞基於類的傳遞通道。組件化
MINA的抽象模型,當然簡單很容易上手,可是存在着上層邏輯使用的不便利,主要仍是在IO的處理方式不一樣所形成的。舉幾個場景接口
一、IO的包解析規則並不同的時候遊戲
二、當邏輯層須要對消息進行註冊的時候,要區分包是發送仍是接受的外層封裝遊戲開發
三、IO的過濾策略不一致的時候開發
可能本人水平有限,當我拿到MINA的時候,我就得作IO包的邏輯區分和封裝,在類名和分包的時候就要體現出來,而且基於iobuffer的解包到上層邏輯處理,我只能在底層寫好進行一體化控制。若是未來解包規則有變更,不一樣的邏輯代碼段須要作解包形式的區分,這種一體化的抽象並不能適應上層的需求還得本身進行封裝解析。這種也有好處,咱們對於網絡細節能夠直觀的把握,而且更貼合底層網絡函數接口,排查問題是很方便的。input
可是這正是Netty的優點,二者既然都是網絡層的封裝框架,他的這種基於上下文的抽象就更加的有優點。由於框架自己對於IO進行的分別抽象,因此能夠很方便的添加不一樣的過濾器,解析規則,在交給上層時更加的天然。而不須要上層再作Send仍是Rev的區分由於有上下文的限制。除此以外Netty的框架對於各個網絡的功能進行了組件化處理,不須要不導入包就是了,也更加的靈活。io