網絡通訊框架: Netty、Mina

#1、概述 Mina:spring

Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 組織一個較新的項目,它爲開發高性能和高可用性的網絡應用程序提供了很是便利的框架。當前發行的 Mina 版本2.04支持基於 Java NIO 技術的 TCP/UDP 應用程序開發、串口通信程序,Mina 所支持的功能也在進一步的擴展中。目前,正在使用 Mina的應用包括:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、 Openfire等等。apache

Netty:編程

Netty是一款異步的事件驅動的網絡應用框架和工具,用於快速開發可維護的高性能、高擴展性協議服務器和客戶端。也就是說,Netty是一個NIO客戶端/服務器框架,支持快速、簡單地開發網絡應用,如協議服務器和客戶端。它極大簡化了網絡編程,如TCP和UDP套接字服務器。安全

  • mina效率更快,netty性能更穩
  • mina將內核和一些特性的聯繫過於緊密,使得用戶在不須要這些特性的時候沒法脫離,相比下性能會有所降低;netty解決了這個設計問題
  • 它們的架構差異不大,mina靠apache生存,而netty靠jboss,和jboss的結合度很是高,netty有對google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi)
  • netty和mina在處理UDP時有一些不一樣,netty將UDP無鏈接的特性暴露出來;而mina對UDP進行了高級層次的抽象,能夠把UDP當成"面向鏈接"的協議,而要netty作到這一點比較困難。mina把TCP和UDP同樣當"有鏈接"的處理,一個UDP請求會按照address產生一個新的 IoSession,過時時間是1分鐘,這樣作的好處是顯然的,可是對於有性能要求的項目就很差了,對一個無鏈接的東西cache1分鐘,大多數時候多是白cache了,作無用功。 Mina這樣作可能還有個初衷是連續解碼用的,好比一個包太大了,分了兩次傳輸;可是這樣的設計應該是udp大忌了。

其餘:Grizzly服務器

Grizzly是一種應用程序框架,專門解決編寫成千上萬用戶訪問服務器時候產生的各類問題。使用JAVA NIO做爲基礎,並隱藏其編程的複雜性。容易使用的高性能的API。帶來非阻塞socketd到協議處理層。利用高性能的緩衝和緩衝管理使用高性能的線程池。網絡

#2、Netty 設計架構

  • 統一的API,適用於不一樣的協議(阻塞和非阻塞)
  • 基於靈活、可擴展的事件驅動模型
  • 高度可定製的線程模型
  • 可靠的無鏈接數據Socket支持(UDP)

性能框架

  • 更好的吞吐量,低延遲
  • 更省資源
  • 儘可能減小沒必要要的內存拷貝

安全異步

  • 完整的SSL/TLS和STARTTLS的支持
  • 能在Applet與Android的限制環境運行良好

健壯性socket

  • 再也不因過快、過慢或超負載鏈接致使OutOfMemoryError
  • 再也不有在高速網絡環境下NIO讀寫頻率不一致的問題

易用

  • 完善的JavaDoc,用戶指南和樣例
  • 簡潔簡單
  • 僅信賴於JDK1.5

總體架構
輸入圖片說明

參考文獻:
http://lippeng.iteye.com/blog/1907279
http://blog.csdn.net/dc_726/article/details/48978891

相關文章
相關標籤/搜索