91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Netty學習:搭建一個簡單的Netty服務

發布時間:2020-06-24 21:08:05 來源:網絡 閱讀:1154 作者:薩芬s 欄目:移動開發

Netty學習:搭建一個簡單的Netty服務

Netty 是一個基于 JAVA NIO 類庫的異步通信框架,它的架構特點是:異步非阻塞、基于事件驅動、高性能、高可靠性和高可定制性。換句話說,Netty是一個NIO框架,使用它可以簡單快速地開發網絡應用程序,比如客戶端和服務端的協議。Netty大大簡化了網絡程序的開發過程比如TCP和UDP的 Socket的開發。Netty 已逐漸成為 Java NIO 編程的首選框架。

項目官方地址:http://netty.io/index.html

一. Netty 的優點:
  • API 使用簡單,開發門檻低;

  • 功能強大,預置了多種編解碼功能,支持多種主流協議;

  • 定制能力強,可以通過 ChannelHandler 對通信框架進行靈活的擴展;

  • 性能高,通過與其它業界主流的 NIO 框架對比,Netty 的綜合性能最優;

  • 社區活躍,版本迭代周期短,發現的 BUG 可以被及時修復,同時,更多的新功能會被加入;

  • 經歷了大規模的商業應用考驗,質量得到驗證。在互聯網、大數據、網絡游戲、企業應用、電信軟件等眾多行業得到成功商用,證明了它完全滿足不同行業的商用標準。

二. 搭建Netty服務:
  1. 添加pom依賴

    Pom代碼  Netty學習:搭建一個簡單的Netty服務

     

    1. <dependency>  

    2.     <groupId>io.netty</groupId>  

    3.     <artifactId>netty-all</artifactId>  

    4.     <version>4.1.0.Final</version>  

    5. </dependency>  

  2. SimpleServer(服務端)

    Java代碼  Netty學習:搭建一個簡單的Netty服務

     

    1. package com.yingjun.netty.server;  

    2.   

    3. import io.netty.bootstrap.ServerBootstrap;  

    4. import io.netty.channel.ChannelFuture;  

    5. import io.netty.channel.ChannelInitializer;  

    6. import io.netty.channel.ChannelOption;  

    7. import io.netty.channel.EventLoopGroup;  

    8. import io.netty.channel.nio.NioEventLoopGroup;  

    9. import io.netty.channel.socket.SocketChannel;  

    10. import io.netty.channel.socket.nio.NioServerSocketChannel;  

    11.   

    12. /** 

    13.  *  

    14.  * Netty中,通訊的雙方建立連接后,會把數據按照ByteBuf的方式進行傳輸, 

    15.  * 例如http協議中,就是通過HttpRequestDecoder對ByteBuf數據流進行處理,轉換成http的對象。 

    16.  *  

    17.  */  

    18. public class SimpleServer {  

    19.     private int port;  

    20.   

    21.     public SimpleServer(int port) {  

    22.         this.port = port;  

    23.     }  

    24.   

    25.     public void run() throws Exception {  

    26.         //EventLoopGroup是用來處理IO操作的多線程事件循環器  

    27.         //bossGroup 用來接收進來的連接  

    28.         EventLoopGroup bossGroup = new NioEventLoopGroup();   

    29.         //workerGroup 用來處理已經被接收的連接  

    30.         EventLoopGroup workerGroup = new NioEventLoopGroup();  

    31.         try {  

    32.             //啟動 NIO 服務的輔助啟動類  

    33.             ServerBootstrap b = new ServerBootstrap();   

    34.             b.group(bossGroup, workerGroup)  

    35.                 //配置 Channel  

    36.                 .channel(NioServerSocketChannel.class)  

    37.                 .childHandler(new ChannelInitializer<SocketChannel>() {   

    38.                         @Override  

    39.                         public void initChannel(SocketChannel ch) throws Exception {  

    40.                             // 注冊handler    

    41.                             ch.pipeline().addLast(new SimpleServerHandler());  

    42.                         }  

    43.                     })  

    44.                 .option(ChannelOption.SO_BACKLOG, 128)   

    45.                 .childOption(ChannelOption.SO_KEEPALIVE, true);   

    46.   

    47.             // 綁定端口,開始接收進來的連接  

    48.             ChannelFuture f = b.bind(port).sync();  

    49.             // 等待服務器 socket 關閉 。  

    50.             f.channel().closeFuture().sync();  

    51.         } finally {  

    52.             workerGroup.shutdownGracefully();  

    53.             bossGroup.shutdownGracefully();  

    54.         }  

    55.     }  

    56.       

    57.     public static void main(String[] args) throws Exception {  

    58.         new SimpleServer(9999).run();  

    59.     }  

    60. }  

  3. SimpleServerHandler(服務端請求處理Handler)

    Java代碼  Netty學習:搭建一個簡單的Netty服務

     

    1. package com.yingjun.netty.server;  

    2.   

    3. import io.netty.buffer.ByteBuf;  

    4. import io.netty.channel.ChannelHandlerContext;  

    5. import io.netty.channel.ChannelInboundHandlerAdapter;  

    6.   

    7. public class SimpleServerHandler extends ChannelInboundHandlerAdapter {  

    8.   

    9.     @Override  

    10.     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {  

    11.         System.out.println("SimpleServerHandler.channelRead");  

    12.         ByteBuf result = (ByteBuf) msg;  

    13.         byte[] result1 = new byte[result.readableBytes()];  

    14.         // msg中存儲的是ByteBuf類型的數據,把數據讀取到byte[]中  

    15.         result.readBytes(result1);  

    16.         String resultStr = new String(result1);  

    17.         // 接收并打印客戶端的信息  

    18.         System.out.println("Client said:" + resultStr);  

    19.         // 釋放資源,這行很關鍵  

    20.         result.release();  

    21.   

    22.         // 向客戶端發送消息  

    23.         String response = "hello client!";  

    24.         // 在當前場景下,發送的數據必須轉換成ByteBuf數組  

    25.         ByteBuf encoded = ctx.alloc().buffer(4 * response.length());  

    26.         encoded.writeBytes(response.getBytes());  

    27.         ctx.write(encoded);  

    28.         ctx.flush();  

    29.     }  

    30.   

    31.     @Override  

    32.     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {  

    33.         // 當出現異常就關閉連接  

    34.         cause.printStackTrace();  

    35.         ctx.close();  

    36.     }  

    37.   

    38.     @Override  

    39.     public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {  

    40.         ctx.flush();  

    41.     }  

    42.   

    43. }  

  4. SimpleServer(客戶端)

    Java代碼  Netty學習:搭建一個簡單的Netty服務

     

    1. package com.yingjun.netty.server;  

    2.   

    3. import io.netty.bootstrap.Bootstrap;  

    4. import io.netty.bootstrap.ServerBootstrap;  

    5. import io.netty.channel.ChannelFuture;  

    6. import io.netty.channel.ChannelInitializer;  

    7. import io.netty.channel.ChannelOption;  

    8. import io.netty.channel.EventLoopGroup;  

    9. import io.netty.channel.nio.NioEventLoopGroup;  

    10. import io.netty.channel.socket.SocketChannel;  

    11. import io.netty.channel.socket.nio.NioServerSocketChannel;  

    12. import io.netty.channel.socket.nio.NioSocketChannel;  

    13.   

    14. public class SimpleClient {  

    15.       

    16.     public void connect(String host, int port) throws Exception {  

    17.         EventLoopGroup workerGroup = new NioEventLoopGroup();  

    18.   

    19.         try {  

    20.             Bootstrap b = new Bootstrap();  

    21.             b.group(workerGroup);  

    22.             b.channel(NioSocketChannel.class);  

    23.             b.option(ChannelOption.SO_KEEPALIVE, true);  

    24.             b.handler(new ChannelInitializer<SocketChannel>() {  

    25.                 @Override  

    26.                 public void initChannel(SocketChannel ch) throws Exception {  

    27.                     ch.pipeline().addLast(new SimpleClientHandler());  

    28.                 }  

    29.             });  

    30.   

    31.             // Start the client.  

    32.             ChannelFuture f = b.connect(host, port).sync();  

    33.   

    34.             // Wait until the connection is closed.  

    35.             f.channel().closeFuture().sync();  

    36.         } finally {  

    37.             workerGroup.shutdownGracefully();  

    38.         }  

    39.     }  

    40.       

    41.     public static void main(String[] args) throws Exception {  

    42.         SimpleClient client=new SimpleClient();  

    43.         client.connect("127.0.0.1"9999);  

    44.     }  

    45.       

    46. }  

  5. SimpleServerHandler(客戶端請求處理Handler springmvc+mybatis+spring 整合 下載地址  

    Java代碼  Netty學習:搭建一個簡單的Netty服務

     

    1. package com.yingjun.netty.server;  

    2.   

    3. import io.netty.buffer.ByteBuf;  

    4. import io.netty.channel.ChannelHandlerContext;  

    5. import io.netty.channel.ChannelInboundHandlerAdapter;  

    6.   

    7. public class SimpleClientHandler extends ChannelInboundHandlerAdapter {  

    8.   

    9.     @Override  

    10.     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {  

    11.         System.out.println("SimpleClientHandler.channelRead");    

    12.         ByteBuf result = (ByteBuf) msg;    

    13.         byte[] result1 = new byte[result.readableBytes()];    

    14.         result.readBytes(result1);    

    15.         System.out.println("Server said:" + new String(result1));    

    16.         result.release();    

    17.     }  

    18.   

    19.     @Override  

    20.     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {  

    21.         // 當出現異常就關閉連接  

    22.         cause.printStackTrace();  

    23.         ctx.close();  

    24.     }  

    25.   

    26.       

    27.     // 連接成功后,向server發送消息    

    28.     @Override    

    29.     public void channelActive(ChannelHandlerContext ctx) throws Exception {    

    30.         String msg = "hello Server!";    

    31.         ByteBuf encoded = ctx.alloc().buffer(4 * msg.length());    

    32.         encoded.writeBytes(msg.getBytes());    

    33.         ctx.write(encoded);    

    34.         ctx.flush();    

    35.     }    

    36. }  

  6. 運行結果:

    Java代碼  Netty學習:搭建一個簡單的Netty服務

     

    1. SimpleClientHandler.channelRead  

    2. Server said:hello client!  

    3. ------------------------------------------  

    4. SimpleServerHandler.channelRead  

    5. Client said:hello Server!  

    6. SimpleServerHandler.channelRead  

    7. Client said:hello Server!  


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

交口县| 沂南县| 房产| 都昌县| 宁陵县| 永昌县| 文安县| 迁西县| 耿马| 苗栗县| 郸城县| 永吉县| 察哈| 恩施市| 静海县| 蓝山县| 柯坪县| 盖州市| 资阳市| 天津市| 桐乡市| 城步| 罗城| 南和县| 克什克腾旗| 错那县| 墨竹工卡县| 迁安市| 凤凰县| 汉阴县| 旺苍县| 五华县| 黎川县| 宁国市| 庆元县| 罗源县| 余庆县| 苏尼特左旗| 长葛市| 唐河县| 永寿县|