Netty

Netty是什麼?

 

本質:JBoss做的一個Jar包

 

目的:快速開發高性能、高可靠性的網絡服務器和客戶端程序

 

優點:提供異步的、事件驅動的網絡應用程序框架和工具

 

通俗的說:一個好使的處理Socket的東東

 

 

如果沒有Netty?

 

遠古:java.net + java.io

 

近代:java.nio

 

其他:Mina,Grizzly

 

爲什麼不是Mina?

 

1、都是Trustin Lee的作品,Netty更晚;

3、Netty的文檔更清晰,很多Mina的特性在Netty裏都有;

4、Netty更新週期更短,新版本的發佈比較快; 

 

Netty的特性

 

設計

統一的API,適用於不同的協議(阻塞和非阻塞)

基於靈活、可擴展的事件驅動模型

高度可定製的線程模型

可靠的無連接數據Socket支持(UDP)

 

性能

更好的吞吐量,低延遲

更省資源

儘量減少不必要的內存拷貝

 

安全

完整的SSL/TLS和STARTTLS的支持

能在Applet與Android的限制環境運行良好

 

健壯性

不再因過快、過慢或超負載連接導致OutOfMemoryError

不再有在高速網絡環境下NIO讀寫頻率不一致的問題

 

易用

完善的JavaDoc,用戶指南和樣例

簡潔簡單

僅信賴於JDK1.5

[java] view plain copy
  1. /** 
  2.  * Netty 服務端代碼 
  3.  *  
  4.  * @author lihzh 
  5.  * @alia OneCoder 
  6.  * @blog http://www.coderli.com 
  7.  */  
  8. public class HelloServer {  
  9.   
  10.     public static void main(String args[]) {  
  11.         // Server服務啓動器  
  12.         ServerBootstrap bootstrap = new ServerBootstrap(  
  13.                 new NioServerSocketChannelFactory(  
  14.                         Executors.newCachedThreadPool(),  
  15.                         Executors.newCachedThreadPool()));  
  16.         // 設置一個處理客戶端消息和各種消息事件的類(Handler)  
  17.         bootstrap  
  18.                 .setPipelineFactory(new ChannelPipelineFactory() {  
  19.                     @Override  
  20.                     public ChannelPipeline getPipeline()  
  21.                             throws Exception {  
  22.                         return Channels  
  23.                                 .pipeline(new HelloServerHandler());  
  24.                     }  
  25.                 });  
  26.         // 開放8000端口供客戶端訪問。  
  27.         bootstrap.bind(new InetSocketAddress(8000));  
  28.     }  
  29.   
  30.     private static class HelloServerHandler extends  
  31.             SimpleChannelHandler {  
  32.   
  33.         /** 
  34.          * 當有客戶端綁定到服務端的時候觸發,打印"Hello world, I'm server." 
  35.          *  
  36.          * @alia OneCoder 
  37.          * @author lihzh 
  38.          */  
  39.         @Override  
  40.         public void channelConnected(  
  41.                 ChannelHandlerContext ctx,  
  42.                 ChannelStateEvent e) {  
  43.             System.out.println("Hello world, I'm server.");  
  44.         }  
  45.     }  
  46. }  
[java] view plain copy
  1. /** 
  2.  * Netty 客戶端代碼 
  3.  *  
  4.  * @author lihzh 
  5.  * @alia OneCoder 
  6.  * @blog http://www.coderli.com 
  7.  */  
  8. public class HelloClient {  
  9.   
  10.     public static void main(String args[]) {  
  11.         // Client服務啓動器  
  12.         ClientBootstrap bootstrap = new ClientBootstrap(  
  13.                 new NioClientSocketChannelFactory(  
  14.                         Executors.newCachedThreadPool(),  
  15.                         Executors.newCachedThreadPool()));  
  16.         // 設置一個處理服務端消息和各種消息事件的類(Handler)  
  17.         bootstrap.setPipelineFactory(new ChannelPipelineFactory() {  
  18.             @Override  
  19.             public ChannelPipeline getPipeline() throws Exception {  
  20.                 return Channels.pipeline(new HelloClientHandler());  
  21.             }  
  22.         });  
  23.         // 連接到本地的8000端口的服務端  
  24.         bootstrap.connect(new InetSocketAddress(  
  25.                 "127.0.0.1"8000));  
  26.     }  
  27.   
  28.     private static class HelloClientHandler extends SimpleChannelHandler {  
  29.   
  30.   
  31.         /** 
  32.          * 當綁定到服務端的時候觸發,打印"Hello world, I'm client." 
  33.          *  
  34.          * @alia OneCoder 
  35.          * @author lihzh 
  36.          */  
  37.         @Override  
  38.         public void channelConnected(ChannelHandlerContext ctx,  
  39.                 ChannelStateEvent e) {  
  40.             System.out.println("Hello world, I'm client.");  
  41.         }  
  42.     }  
  43. }  


優秀的設計----事件驅動



 

 

優秀的設計----線程模型



發佈了44 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章