美文网首页
Netty 学习笔记(1)

Netty 学习笔记(1)

作者: 笨手笨脚越 | 来源:发表于2017-07-26 22:58 被阅读29次

本文是我学习《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的整个生命周期内都不会改变。

相关文章

网友评论

      本文标题:Netty 学习笔记(1)

      本文链接:https://www.haomeiwen.com/subject/itrakxtx.html