netty 多个 本地udp端口_新手入门:Netty高性能原理和框架架构

一起学习下Netty,从Netty的相关简介,Demo的着陆,从线程模型的话,里面用到了NIO的相关知识,可以看之前的文章回顾下。

6b99b17c3663466061f4e28145911d52.png

Netty简介

  • ① 介绍

Netty是一个高性能,高可扩展性的异步事件驱动的网络应用框架,它极大地简化了TCP和UDP客户端和服务端开发等网络编程。

  • ② 四个内容

1.Reactor 线程模型:一种高性能的多线程设计思路。
2.Netty中自定义的channel概念,增强版的通道概念。
3.ChannelPipline职责链设计模式:事件处理机制。
4.内存管理:增强的ByteBuf缓冲区。

  • ③ API

netty.io

33676d3e5d617dce30406db080e672c0.png
  • ④ 如何学习

网上的很多都是直接说理论,感觉很多时候直接给你对蒙圈了,其实还是从实践来出发去学习更有效果,
netty的源码中,有个专门的目录里面有各种的实例,直接通过netty的源码中加入中文的注释的方式。
github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example

  • ⑤ Netty线程模型

为了让NIO处理更好的利用多线程特性,Netty实现了Reactor线程模型。
Reator模型中有四个核心概念

  1. Resources 资源(请求/任务)
  2. Synchronous Event Demultiplexer 同步事件复用器
  3. Dispatcher 分配器
  4. Request Handler 请求处理器
3da7c8c18a506bcc008ee2eae7d58d30.png
  • ⑥ EventLoopGroup初始化过程
621e4cb326b2b98869d88c523a01e1e2.png
  • ⑦ EventLoop的启动

EventLoop 组神实现了Executor接口,当调用executor方法提交任务时,则判断是否启动,未启动则调用内置的executor创建新县城来出发run方法执行。

31b07b4633aaed8c23e38866bd0ca0f3.png
  • ⑧ Bind绑定端口过程
800529dff8a86c16460748d33143cf17.png
  • ⑨ channel

netty中的Channel是一个抽象的概念,可以理解为对JDK NIO Channel的增强和拓展,增加了很多属性和方法。

0fbaba06914d769987e605f81246dada.png
  1. Channel:和Java Nio中的Channel同名,是Netty对网络底层读写和连接的抽象。
  2. AbstractChannel: 是Channel的抽象实现类,抽象出了parent,id,unsafe,pipeline等概念。
  3. AbstractNioChannel:封装Java NIO,通过Selector选择器进行IO事件的监听,拥有
    SelectionKey,readInterestOp等NIO的属性,这是在这个类的构造函数中设置了非阻塞模式。
  4. AbstractNioByteChannel此抽象类开始的分支中的类都是关于客户端的Channel,AbstractNioMessageChannel此抽象类开始的分支中的类都是关于服务端的Channel,前者和后者都继承自AbstractNioChannel,区别在于客户端Channel注册的感兴趣的事件时READ事件,服务端Channel注册的感兴趣的事件时ACCEPT事件。
  5. NioByteUnsafe类是客户端实现读写的类,NioMessageUnsafe类是服务端实现读写的类,二者的区别在于读写的具体实现不同。客户端与NioSocketChannel关联的配置类为NioSocketChannelConfig类,服务端与NioServerSocketChannel关联的配置类为NioServerSocketChannelConfig类。

PS:毕竟抽象的设计模式,在学习过程中会有难懂的地方,需要根据代码去理解。主要是领会Reactor的理念。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值