源码解析:Netty 客户端链接数据写出完整流程分析

引言

在前文中我们介绍了连接就绪,读就绪,接受就绪三种事件流程的处理代码。这篇文章我们来介绍下最后一种流程,数据写出。当用户业务需要将数据写出时一般会调用 channel.write 或者是 channel.writeAndFlush。相关的 API 在入门篇的例子中也有过演示。本文,我们将来分析这两个 API 背后的工作原理。

write 和 flush 的区别

在 Netty 的设计中,写出侧存在一个写出缓存。当我们调用 channel.write 或者 channelHandlerContext.write 时,其实只是将需要写出的内容放入到写出缓存的队列中。而只有调用 channel.flush 或者 channelHandlerContext.flush 才会让 Netty 将写出缓存中的数据真正写出到 Socket 的缓冲区从而通过 tcp 来发送。当然,Netty 也提供了方便的整合方法 writeAndFlush 用于将数据写出并且刷出到 socket 缓冲区。下面我们来分别分析下两个不同的方法。

数据写出 write

NioSocketChannelwrite 方法实际上委托给 pipeline 来处理,是一个出站事件。经过管道中层层处理器对数据的转换,最终到达管道的首节点的 write 方法。而首节点的 write 方法再次将写出动作委托给 unsafe.write。在 NioSocketChannel 中,unsafe 实例是 NioSocketChannelUnsafe,其 write 方法继承自

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 59.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值