Netty使用概述

一、网络I/O框架

谈到网络I/O框架,大家通常脑海里边第一个闪现出来的是JAVA BIO(Blocking I/O,阻塞I/O)、JAVA NIO(Non-blocking I/O,非阻塞I/O)和JAVA AIO(Asynchronized I/O,异步I/O)。但是基于原生JDK的I/O组件对网络I/O功能进行实现并用于生产环境略有复杂,以基于JAVA NIO为例,需要开发者自行处理网络连接、事件注册与监听、事件处理、线程池创建与调度等必备操作。因此对原生JDK I/O组件进行必要的封装,仅将事件处理部分暴露出来,交由业务代码使用,是十分有必要的。

Netty就是这样一种封装了底层网络通信、线程池创建、事件注册与监听的网络I/O框架。Netty的主页为:https://netty.io/

二、Netty之前的网络I/O处理方式

假设没有Netty,那么网络I/O处理方式主要有以下几步(远古时代的JAVA BIO的方式我们就不举例了,我们直接用JAVA NIO进行举例)。

对于Server端:

  1. Open ServerSocketChannel;
  2. 设置非阻塞;
  3. 绑定到指定的IP地址和端口;
  4. Open Selector;
  5. 将ServerSocketChannel注册到Selector中,由Selector对Channel上的事件进行监听;
  6. 在循环中执行Selector的select方法,获取Channel上的事件;
  7. 根据获取的事件类型,调用相关的业务处理代码,比如channel被accept时、可读时、可写时,此时还需要考虑使用线程池来分配多线程对事件进行响应,以提升处理性能。

对于Client端:

  1. Open SocketChannel;
  2. 设置非阻塞;
  3. 连接到Server端的IP地址和端口;
  4. Open Selector;
  5. 将SocketChannel注册到Selector中,由Selector对Channel上的事件进行监听;
  6. 在循环中执行Selector的select方法,获取Channel上的事件;
  7. 根据获取的事件类型,调用相关的业务处理代码,比如channel被conne

你可能感兴趣的:(Netty,JAVA,I/O,Netty,网络通信)