(一)先簡單使用和了解一下Netty的基本原理架構

Netty是基於CS架構的一種模式,分爲Client端和Server端

在這裏插入圖片描述
(1)先從Server端開始,先看一下Netty服務端的運行原理圖:

首先你得知道下面的幾個主要的角色:

  • serverBootstrap
  • NioEventLoopGroup (這個是專門負責接收client端的請求的)
  • NioEventLoopGroup (這個是專門負責幹活的)
  • NioServerSocketChannel (當和client建立連接之後,生成NioSocketChannel,並將NioSocketChannel註冊到某個worker NioEventLoop的selector上)

然後就是具體的執行Netty服務端的具體執行流程:

  1. 首先server端啓動時綁定本地某個端口,初始化channel,其實就是生成channel的實例對象NioServerSocketChannel。
  2. 然後將自己NioServerSocketChannel註冊到某個bossGroup(其實就是讓前臺經理先去接待)的NioEventLoop的selector上,每個NioEventLoop包含1個selector和1個事件循環線程
  3. 然後進入到bossGroup的循環線程中,其實就是他要怎麼去處理這個“接待”的過程
    • 第一步bossGroup需要去輪詢accept事件,

(2)這是Netty服務端的基本使用的模板代碼:

public class NettyServer {

    public static void main(String[] args) throws InterruptedException {

        //可以把這個看成是一個大Boss負責把這個公司的環境給搭建好,把人員給各就各位
        ServerBootstrap serverBootstrap = new ServerBootstrap();

        //這個相當於前臺經理Boss(主要負責接待),這個組裏包含多個事件循環,每個NioEventLoop包含1個selector和1個事件循環線程
        NioEventLoopGroup boosGroup = new NioEventLoopGroup();
        //這個就是worker線程組,相當於技術經理主要負責產出
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();
        //這個其實就是綁定端口,初始化各種組件
       try {
       ChannelFuture channelFuture = serverBootstrap
               //前者是一個父線程池事件組,後者參數是子線程池事件組(其實就是專門用來處理具體的任務的)
               .group(boosGroup, workerGroup)
               //指定 Channel 的類型. 因爲是服務器端, 因此使用了 NioServerSocketChannel.
               .channel(NioServerSocketChannel.class)
               //設置數據的處理器.
               .childHandler(new ChannelInitializer<NioSocketChannel>() {
                   @Override
                   protected void initChannel(NioSocketChannel ch) {
                       ch.pipeline().addLast(new StringDecoder());
                       ch.pipeline().addLast(new SimpleChannelInboundHandler<String>() {
                           @Override
                           protected void channelRead0(ChannelHandlerContext ctx, String msg) {
                               System.out.println("打印管道中的信息----->" + msg);
                           }
                       });
                   }
               })
               .bind(9090).sync();
       }finally {
           //這裏是關閉線程組
           boosGroup.shutdownGracefully();
           workerGroup.shutdownGracefully();
       }

    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章