工作原理

Netkit是基于Reactor模式设计,即服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor模式也叫Dispatcher模式,即I/O多路复用统一监听事件,收到事件后分发(Dispatch给某进程),这是编写高性能网络服务器最重要的技术之一。

核心类介绍

  • ServerAcceptor: 服务端网络IO请求响应类,在程序启动时绑定对应的IP和端口,程序启动后接收对端网络发送的请求并将该网络请求分发到EventLoopGroup进行IO数据处理。

  • EventLoopGroup: IO数据轮询组,管理所有的EventLoop,其底层为一组线程池,当ServerAcceptor接收并建立对端请求后会通过此类将对端IO每个事件均衡分发到指定的EventLoop中,通过Selector.wakeup唤醒对应的 Selector 选择器。

  • EventLoop: Reactor 线程模型的事件处理引擎,每个 EventLoop 线程都维护一个 Selector 选择器,它主要负责处理包括读、写、IO异常等各种 I/O 事件。

  • IoFilter: IO数据过滤器,负责对各种IO数据进行数据筛选和过滤,包括异常IO数据解析、各种网络协议数据解析,底层协议解析支持Http协议、Socks协议、Whois协议、DNS协议、SMTP协议以及各种自定义网络协议。

  • IoProcessor: IO数据处理器,在EventLoop对各种网络数据处理和解析过滤后交由此类进行最终数据处理,其内部都维护一个Channel便于将自身注册到Selector来实现所有IO数据的异步处理。

  • IoListener: IO数据处理监听器,由业务自定义监听逻辑,根据不同的监听事件进行处理,包括数据接收时的监听,数据连接时的监听,数据读写的监听以及网络关闭、网络异常时的监听。

  • IoHandler: IO数据处理器,真正交由业务自己实现的IO数据处理器,针对服务端为ServerHandler,针对客户端为ClientHandler

框架图