Netty笔记(一)

1. Netty的事件处理池类,依次继承NioEventLoopGroup -> MultithreadEventLoopGroup -> EventLoopGroup ,将Channel注册,拿到ChannelFuture,添加监听回调方法;


2. 各类IO模型

a. 非阻塞I/O,应用进程不断进行系统调用recvfrom
b. I/O复用模型,系统提供select/poll系统调用,应用将一批socket fd提供给系统,进行轮训;epoll使用基于事件驱动方式代替顺序扫描,性能更高;回调函数rollback
   select 数据准备好 recvfrom;进程受阻于select()调用;数据拷贝到应用缓冲区期间进程阻塞;
c. 信号驱动I/O模型,assginAction,返回;数据准备好,通知应用发起recvfrom系统调用;
d. 异步I/O,跟信号驱动类似,它是数据已经拷贝到应用缓冲区的时候才通知;

 3. 阻塞I/O的弊端,第一种:一个连接一个线程,资源耗尽 第二种 把连接放到线程池中执行,因为是阻塞的,当耗时较长时,线程池满了,连接拒绝,连接超时;


 4. NIO缓冲区,如ByteBuffer,提供一个Api方便访问数据;Channel全双工通道;多路复用器Selector,论询多个Channel,目前使用epoll在fd上回调函数;


 5. NIO服务端的过程
    a. 创建server端channel,ServerSocketChannel
    b. 绑定端口,监听;创建selector,将事件SelectionKey.OP_ACCEPT注册到selector上去;
    c. 无限轮询select(),有准备好的连接,accept出来的socketChannel注册OP_READ到selector上去;
    d. 将channel链路设置为非阻塞模式,异步读取客户端消息;
    e. 如果发送区TCP缓冲区满了,会导致半包,因为你要先发送一波嘛;此时需要监听写操作位;这就是半包;

6. NIO客户端过程
    a. 创建SocketChannel,设置为非阻塞模式,判断连接结果,如果未连接,则这注册OP_CONNET到selector,当然之前是新建了selector;
    b. 注册READ到selector,异步读取ByteBuffer;
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值