Netty核心组件介绍

Netty是一款用于创建高性能网络应用程序的高级框架。Netty的核心组件如下:

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

Channel

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

回调

Netty在内部使用了回调来处理事件:当一个回调被触发时,相关的事件可以被一个ChannelHandler的实现处理。
如:

public class ContentHandler extends ChannelInboundHandlerAdapter {public void channelActive(ChannelHandlerContext ctx) throws Exception {System.out.println("client " + ctx.channel().remoteAddress() + " connected");}
}

Future

Future提供了另一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对其结果的访问。
JDK预置了java.util.concurrent.Future,但是其所提供的实现只允许手动检查对应的操作是否已经完成,或者一直阻塞直到它完成。Netty提供了它自己的实现——ChannelFuture,用于在执行异步操作的时候用。每个Netty的io操作都将返回一个ChannelFuture,也就是说它们都不会阻塞。Netty是完全异步和事件驱动的。
使用方法如下:

	Channel channel = ... ;ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));future.addListener(new ChannelFutureListener() {public void operationComplete(ChannelFuture future) {if(future.isSuccess()) {ByteBuf buffer = Unpooled.copiedBuffef("Hello", Charset.defaultCharset());ChannelFuture wf = future.channel().writeAndFlush(buffer);} else {future.cause().printStackTrace();	}}});

事件和ChannelHandler

Netty使用不同的事件来通知我们状态的改变或操作的状态。这使得我们能够根据已经发生的事件来触发适当的动作。Netty是一个网络编程框架,所以事件是按照它们与入站或出站数据流的相关性进行分类的。可能由入站数据或者相关的状态更改而触发的事件包括:

  • 连接已被激活或连接失活

  • 数据读取

  • 用户事件

  • 错误事件
    出站事件是未来将会触发的某个动作的操作结果,这些动作包括:

  • 打开或关闭到远程节点的连接

  • 将数据写到或冲刷到套接字

每个事件都可以被分发给ChannelHandler类中的某个用户实现的方法。下图展示了一个事件是如何被一个这样的ChannelHandler链处理的。
在这里插入图片描述
你可以认为每个ChannelHandler的实例都类似于一种为了响应特定事件而被执行的回调。

合在一起

Future、回调和ChannelHandler

Netty的异步编程模型是建立在Future和回调的概念之上的,而将事件派发到ChannelHandler的方法则发生在更深的层次上。结合在一起,这些元素就提供了一个处理环境,使你的应用程序逻辑可以独立于任何网络操作相关的顾虑而独立地演变。这也是Netty的设计方式的一个关键目标。
拦截操作以及高速地转换入站数据和出站数据,都只需要你提供回调或利用操作返回的Future。这使得链接操作变得既简单又高效,并且促进了可重用的通用代码的编写。

选择器、事件和EventLoop

Netty通过触发事件将Selector从应用程序中抽象出来,消除了所有将需要手动编写的派发代码。在内部,为每个Channel分配一个EventLoop,用以处理所有事件,包括:

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

EventLoop本身只由一个线程驱动,其处理了一个Channel的io事件,并且在该EventLoop的整个生命周期内都不会改变。这个简单而强大的设计消除了你所有可能有的在ChannelHandler实现中需要进行同步的任何顾虑,因此你可以专注于提供正确的逻辑,用来在有感兴趣的数据要处理的时候执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/689715.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel表格里,可以把百分号放在数字前面吗?

在有些版本里是可以的,这样做: 选中数据,鼠标右键,点击设置单元格格式,切换到自定义,在右侧栏输入%0,点击确定就可以了。 这样设置的好处是,它仍旧是数值,并且数值大小没…

攻防世界-web-command_execution

题目: 原理: | 的作用为将前一个命令的结果传递给后一个命令作为输入 &&的作用是前一条命令执行成功时,才执行后一条命令 方法一: 第一步: 1.打开浏览器,在文本框内输入127.0.0.1 | find / -name…

【算法】二叉树中的dfs

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、计算布尔二叉树的值二、求根节点到叶节点数字之和三、二叉树剪枝四、验证搜索二叉树五、二叉搜索树中…

搭建一个Xx431?

搭建一个Xx431? 嘿uu们!刚结束了一周六天班感觉如何? 我的状态倒还行,工作生活总能找到乐子,本周整活就是用纸巾和蛋糕托做的油灯,另外想制冷片做个温水冷水可调的杯托,但我还不会搞3d,希望今年能搞起来. 题外话就说到这,这个选题也是因为实际遇到的问题需要这玩意,下班路…

【Android】Apk图标的提取、相同目录下相同包名提取的不同图标apk但是提取结果相同的bug解决

一般安卓提取apk图标我们有两种常用方法: 1、如果已经获取到 ApplicationInfo 对象(假设名为 appInfo),那么我们获取方法为: appInfo.loadIcon(packageManager)// 返回一个 Drawable 对象2、 如果还没获取到 Applica…

linux上使用mariadb安装mysql环境

之前都是手动安装mysql数据库,现在尝试下在线安装,为后面的项目部署做准备,突然发现使用mariadb安装mysql环境真的超级简单。 1.使用mariadb安装mysql 安装服务端: yum install mariadb-server -y 安装客户端: yum i…

618洗地机推荐,市面上各式各样的洗地机怎么选?这里有答案

洗地机的出现极大地改变了清洁方式,通过结合扫地、拖地、吸尘等多种功能,实现了一机多用的便捷清洁体验。而且洗地机不需要弯腰,每次也不用清洁很长时间,节省出来的时间可以更好的休息,但是市面上各式各样的洗地机怎么…

基于springboot+vue+Mysql的外卖点餐系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

virtualbox下ubantu20.04版本实现与window的复制粘贴

1.建议开启双向 2.打开Ubuntu命令终端 快捷键 ctrialtt,具体在设置里面查看快捷键 3.卸载已有工具 sudo apt-get autoremove open-vm-tools4.安装 sudo apt-get install open-vm-tools-desktop5.记得sudo reboot重启 sudo reboot这里记得加上sudo,…

【管理咨询宝藏96】企业数字化转型的中台战略培训方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏96】企业数字化转型的中台战略培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 数字化转型是指&…

搭建Docker私服镜像仓库Harbor

1、概述 Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。 Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。 …

静态住宅代理 IP 的影响

在不断发展的在线业务和数字营销领域,保持领先地位势在必行。在业界掀起波澜的最新创新之一是静态住宅代理 IP 的利用。这些知识产权曾经是为精通技术的个人保留的利基工具,现在正在成为各行业企业的游戏规则改变者。 一、静态住宅代理IP到底是什么&…