Netty 学习笔记(1)

本文是我学习《Netty实战》的一些笔记。


Netty 的核心组件:

  1. Channel
  2. 回调
  3. Future
  4. 事件和ChannelHandler

一、 Channel

Channel 是 java NIO的一个基本构造。可以把Channel看做是传入或者传出数据的载体。它可以被打开或者关闭,连接或者断开连接。

二、回调

一个回调就是一个方法,一个指向已经被提供给另外一个方法的方法的引用,使得后者可以再适当的时候调用前者。Netty内部使用了回调来处理事件,当一个回调被触发时候,相关的事件可以被一个interfaceChannelHandler的实现处理。
比如,当一个新的连接被建立,ChannelHandler的channelActive()回调方法将会被调用。

public class EchoServerHandler extends ChannelHandlerAdapter{

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        ctx.write("连接建立!");
    }
}

三、Future

Future提供了另一种在操作完成时通知应用程序的方式。Netty提供了ChannelFuture,用于在执行异步操作的时候使用。ChannelFuture提供了方法可以注册一个或多个ChannelFutureListener实例。listener的回调方法operationComplete()将会在对应的操作完成时被调用。

四、事件和ChannelHandler

Netty 使用不同的事件来通知我们状态的改变或者是操作的状态。我们可以基于已经发生的事件来触发适当的动作。Netty的事件按照它们与入站或出站数据流的相关性进行分类。

入站:

  • 连接已被激活或者连接失活
  • 数据读取
  • 用户事件
  • 错误事件

出站:

  • 打开或者关闭到远程节点的连接
  • 将数据写到或者冲刷到socket

每个事件都可被分发给ChannelHandler类中的某个用户实现的方法。

五、EventLoop

Netty通过触发事件讲Selector从应用程序中抽象出来。在内部,为每个Channel分配一个EventLoop,用以处理所有事件,包括:

  • 注册感兴趣的事件
  • ==将事件派发给ChannelHandler==
  • 安排进一步的动作

EventLoop 本身由一个线程驱动,处理了一个Channel的所有I/O事件,并且在该EventLoop的整个生命周期内都不会改变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容