当前位置:首页 > 实用技巧 >

netty文件传输(netty传输二进制文件)

来源:原点资讯(www.yd166.com)时间:2024-02-21 13:35:28作者:YD166手机阅读>>

本系列Netty源码解析文章基于 4.1.56.Final版本

netty文件传输,netty传输二进制文件(1)

主从Reactor组完整结构.png

在?《Netty如何高效接收网络数据》一文中,我们介绍了 Netty 的 SubReactor 处理网络数据读取的完整过程,当 Netty 为我们读取了网络请求数据,并且我们在自己的业务线程中完成了业务处理后,就需要将业务处理结果返回给客户端了,那么本文我们就来介绍下 SubReactor 如何处理网络数据发送的整个过程。

我们都知道 Netty 是一款高性能的异步事件驱动的网络通讯框架,既然是网络通讯框架那么它主要做的事情就是:

  • 接收客户端连接。
  • 读取连接上的网络请求数据。
  • 向连接发送网络响应数据。

前边系列文章在介绍?Netty的启动以及?接收连接的过程中,我们只看到 OP_ACCEPT 事件以及 OP_READ 事件的注册,并未看到 OP_WRITE 事件的注册。

  • 那么在什么情况下 Netty 才会向 SubReactor 去注册 OP_WRITE 事件呢?
  • Netty 又是怎么对写操作做到异步处理的呢?

本文笔者将会为大家一一揭晓这些谜底。我们还是以之前的 EchoServer 为例进行说明。

@Sharable public class EchoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { //此处的msg就是Netty在read loop中从NioSocketChannel中读取到的ByteBuffer ctx.write(msg); } }

我们将在?《Netty如何高效接收网络数据》一文中读取到的 ByteBuffer (这里的 Object msg),直接发送回给客户端,用这个简单的例子来揭开 Netty 如何发送数据的序幕~~

在实际开发中,我们首先要通过解码器将读取到的 ByteBuffer 解码转换为我们的业务 Request 类,然后在业务线程中做业务处理,在通过编码器对业务 Response 类编码为 ByteBuffer ,最后利用 ChannelHandlerContext ctx 的引用发送响应数据。

本文我们只聚焦 Netty 写数据的过程,对于 Netty 编解码相关的内容,笔者会在后续的文章中专门介绍。

netty文件传输,netty传输二进制文件(2)

本文概要.png

1. ChannelHandlerContext

netty文件传输,netty传输二进制文件(3)

pipeline结构.png

通过前面几篇文章的介绍,我们知道 Netty 会为每个 Channel 分配一个 pipeline ,pipeline 是一个双向链表的结构。Netty 中产生的 IO 异步事件会在这个 pipeline 中传播。

Netty 中的 IO 异步事件大体上分为两类:

  • inbound事件:入站事件,比如前边介绍的 ChannelActive 事件, ChannelRead 事件,它们会从 pipeline 的头结点 HeadContext 开始一直向后传播。
  • outbound事件:出站事件,比如本文中即将要介绍到的 write事件 以及 flush 事件,出站事件会从相反的方向从后往前传播直到 HeadContext 。最终会在 HeadContext 中完成出站事件的处理。 本例中用到的 channelHandlerContext.write() 会使 write 事件从当前 ChannelHandler 也就是这里的 EchoServerHandler 开始沿着 pipeline 向前传播。 而 channelHandlerContext.channel().write() 则会使 write 事件从 pipeline 的尾结点 TailContext 开始向前传播直到 HeadContext 。

netty文件传输,netty传输二进制文件(4)

栏目热文

netty大文件传输框架(netty大文件上传)

netty大文件传输框架(netty大文件上传)

今天我们来完成一个使用netty进行文件传输的任务。在实际项目中,文件传输通常采用FTP或者HTTP附件的方式。事实上通...

2024-02-21 13:48:27查看全文 >>

怎么写netty(netty入门教程文档)

怎么写netty(netty入门教程文档)

思维导图前言本文主要讲述netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能...

2024-02-21 13:34:19查看全文 >>

netty 怎么通信(netty怎么维护长连接)

netty 怎么通信(netty怎么维护长连接)

摘自 rickiyang 51CTO技术栈 很早以前就写过关于 Netty 的使用,最近发现还有网友在看之前写的那篇 N...

2024-02-21 13:23:06查看全文 >>

netty怎么设置网络通信(netty怎么设置自定义协议)

netty怎么设置网络通信(netty怎么设置自定义协议)

一、步骤概览二、步骤说明1. 引入依赖包说明:Netty-all:netty-all 是 Netty 的一个打包模块,包...

2024-02-21 13:46:07查看全文 >>

五菱小卡怎么看出国五还是国6(五菱小卡国五好还是国六好)

五菱小卡怎么看出国五还是国6(五菱小卡国五好还是国六好)

【卡车之家 原创】“地摊经济”走红之后,自主创业似乎又多了一个新的选择。但工欲善其事必先利其器,没有好的装备怎么能行?能...

2024-02-21 13:49:36查看全文 >>

netty 文件分发(netty详细步骤)

netty 文件分发(netty详细步骤)

一、异步非阻塞通信1.1 传统BIO1.2 非阻塞NIO1.3 拓展:AIO1.4 I/O多路复用机制1.4.1 sel...

2024-02-21 13:52:34查看全文 >>

怎么集成netty(netty操作原理)

怎么集成netty(netty操作原理)

Gateway和Netty都有盲区的感觉;一、Netty简介Netty是一个异步的,事件驱动的网络应用框架,用以快速开发...

2024-02-21 13:37:42查看全文 >>

为什么要学习netty(netty有必要学吗)

为什么要学习netty(netty有必要学吗)

2021年了,终于开始系统性总结Netty相关的东西了。这会是Netty系列的第一篇,我想先聊聊 “为什么要学习Nett...

2024-02-21 13:41:47查看全文 >>

netty框架教学(netty框架工作原理)

netty框架教学(netty框架工作原理)

一 什么是 Netty? 能做什么?netty 是一个致力于创建高性能网络应用程序的成熟的 IO 框架。相比较与直接使用...

2024-02-21 13:48:53查看全文 >>

如何使用netty(netty调用方法)

如何使用netty(netty调用方法)

前言Netty 祭天,法力无边。哈哈哈 , Netty 这组件,哪怕你从来没主动用过,但是它无时无刻都在你身边。可以说,...

2024-02-21 13:20:02查看全文 >>

文档排行