源码解析: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 方法继承自

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值