博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Netty入门简介
阅读量:4150 次
发布时间:2019-05-25

本文共 1297 字,大约阅读时间需要 4 分钟。

概述

netty是什么?

    netty是一个基于java的开源框架,提供了异步的、事件驱动的网络编程框架,用于开发高可用、高可靠性的网络服务器和客户端程序。

    netty可以支持多协议,比如FTP、SMTP、HTTP和WebSocket以及其他的基于二进制和基于文本的协议,netty扩展了他的应用范围和灵活性。

Netty核心组件

  • Channel
  • 回调
  • Future
  • 事件和ChannelHandler

这些组件组合起来用于处理网络以及流经网络的数据

Channel

    它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或者多个不同的I/O操作的程序组件)的开发连接,比如读操作和写操作。 

    可以把channel看成是传入或者传出的数据载体,可以被打开或者关闭,连接或者断开连接。

    Channel是java NIO中的基本构造,和NIO中的channel是相同的

回调

    关于回调的的理解,其实类似于ajax请求结束后,会执行的方法,在netty当中,可以看到大量的使用回调,比如,当一个新的连接建立之后,ChannelHandler中的channelActive()方法将会被调用 

当新的连接建立的时候,就会调用这个方法,打印出一条信息

Future

    future这个接口在jdk 1.5时候已经存在了,在netty中对future又进行了封装,实现了自己的future-ChannelFuture, 最主要的区别就是添加了监听器,可以在方法执行结束后,进行调用。

    对于netty中的方法,只要是返回ChannelFuture毫无疑问这个方法就是非阻塞的   

    在连接成功之后,会调用里面的方法,如果发生错误也可以把错误信息打印出来,

其实这里的ChannelFutureListener可以看做是回调方法,回调和future是互补的

事件和ChannelHandler

    netty可以根据不同的事件来通知我们状态的改变或者是操作的状态,使得我们基于发生的事件来触发指定的操作,可能是记录日志,数据转换,流控制,应用程序逻辑;

    根据入站数据或者相关的状态更改触发的事件:

        1、连接激活或者连接失效;

        2、数据读取;

        3、用户事件;

        4、错误事件;

    出站事件是未来将会触发的某个动作的操作,

        1、打开或者关闭远程节点的连接;

        2、将数据写或者冲刷到套接字;

   每个事件都可以分发给具体的ChannelHandler类中的某个用户的实现方法,可以认为每个ChannelHandler的实例都类似于一种为了响应特定事件而被执行的回调。

总结

       可以看出netty的异步编程模型,主要是建立在回调和future基础上的,将具体的事件派发到对应的ChannelHandler 上

      在netty内部会为每个Channel分配一个EventLoop,用来处理所有的事件,其中包括注册感兴趣的事件,将事件派发给ChannelHandler,安排进一步的动作

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

你可能感兴趣的文章
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
异常 Java学习Day_15
查看>>
Mysql初始化的命令
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>