netty系列(0)----非常浅薄的初探或者叫读书笔记
程序员文章站
2024-02-02 08:31:46
...
本文没有参考意义,仅作为我的读书笔记吧,所有功劳归功于下面链接的原作者
https://segmentfault.com/a/1190000014969780
下面这个链接也给我很大帮助
https://www.iteye.com/magazines/132-Java-NIO#579]
netty学习笔记
不像之前的的阻塞性IO,必须为每个任务都分配一个Thread,大量的Thread会造成上下文的大量切换,耗费时间
NIO提供了一种非阻塞性IO,用一个selector来为IO操作选择空闲的Thread

Netty的几个关键知识点
1:channel
因为IO操作的几个原语bind()、connect()、read()和write()属于底层的实现,之前用socket来作为实体操作。现在在netty中提供了channel的api大大简化了难度。
2:回调
很简单就是按我们所知的,预留的一个方法,当某个任务完成后,调用的方法
3:channelFuture
扩展了juc.Future的方法, 不用时刻去检查是否已完成, 而是提供开放注册一系列的channelFutureListener,当完成后会主动调用listener的operateCompelete方法。
提供了一个例子, 因为连接是异步,所以connect会立刻返回,通过向channelFuture注册listener的方式,在操作完成后回调方法。
4: ChannelHandler
作为处理事件的进入和出流的用户可自编辑的组件, 初步理解为一个处理逻辑的链
5: ChannelPipeline
初步理解为ChannelHandle的容器,通过api将Handler加入到Pipeline中
6:EventLoop
没看懂, 每个EventLoopGroup可能有多个EventLoop,用于处理连接的生命周期中所发生的事件
#TODO
7:Bootstrap和ServerBootstrap
Boot为客户端,Server为服务端
客户端有两个EventLoopGroup,服务端有两个,用于维持本身的连接和响应客户端的连接。
https://segmentfault.com/a/1190000014969780
下面这个链接也给我很大帮助
https://www.iteye.com/magazines/132-Java-NIO#579]
netty学习笔记
不像之前的的阻塞性IO,必须为每个任务都分配一个Thread,大量的Thread会造成上下文的大量切换,耗费时间
NIO提供了一种非阻塞性IO,用一个selector来为IO操作选择空闲的Thread

Netty的几个关键知识点
1:channel
因为IO操作的几个原语bind()、connect()、read()和write()属于底层的实现,之前用socket来作为实体操作。现在在netty中提供了channel的api大大简化了难度。
2:回调
很简单就是按我们所知的,预留的一个方法,当某个任务完成后,调用的方法
3:channelFuture
扩展了juc.Future的方法, 不用时刻去检查是否已完成, 而是提供开放注册一系列的channelFutureListener,当完成后会主动调用listener的operateCompelete方法。
Channel channel = ...; // 连接远程节点 ChannelFuture future = channel.connect( new InetSocketAddress("192.168.0.1", 25)); //注册一个ChannelFutureListener,以便在操作完成时获得通知 future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) { //状态判断 if (future.isSuccess()){ //如果操作是成功的,则创建一个ByteBuf 以持有数据 ByteBuf buffer = Unpooled.copiedBuffer( "Hello",Charset.defaultCharset()); //将数据异步地发送到远程节点。返回一个ChannelFuture ChannelFuture wf = future.channel() .writeAndFlush(buffer); .... } else { //如果发生错误,则访问描述原因的Throwable Throwable cause = future.cause(); cause.printStackTrace(); } } });
提供了一个例子, 因为连接是异步,所以connect会立刻返回,通过向channelFuture注册listener的方式,在操作完成后回调方法。
4: ChannelHandler
作为处理事件的进入和出流的用户可自编辑的组件, 初步理解为一个处理逻辑的链
5: ChannelPipeline
初步理解为ChannelHandle的容器,通过api将Handler加入到Pipeline中
6:EventLoop
没看懂, 每个EventLoopGroup可能有多个EventLoop,用于处理连接的生命周期中所发生的事件
#TODO
7:Bootstrap和ServerBootstrap
Boot为客户端,Server为服务端
客户端有两个EventLoopGroup,服务端有两个,用于维持本身的连接和响应客户端的连接。
下一篇: PHP学习笔记 - 入门篇(4)