Netty 中的 ChannelOutboundHandler 接口到底有啥用?

2018-07-11 11:53:26 +08:00
 lhx2008
我看到大部分人用的都是 Inbound 的接口

但是 outbound 里面有 read() write() close() 这些接口,什么时候会用到呢?

因为感觉作用和 Inbound 接口是重叠的,调用顺序也基本和 Inbound 重叠,Inbound 链中也可以对出站数据进行处理,传入参数都是 ChannelHandlerContext

网上的资料和官方 doc 也讲的很玄乎,入站出站,但是 debug 一下就发现和 Inbound 是重叠的,只是名字不一样

in.channelActive()
out.read()
in.channelRead()
in.channelReadComplete()
out.close()
in.channelInactive()
3188 次点击
所在节点    问与答
3 条回复
wowo243
2018-07-11 12:04:54 +08:00
同好奇
SparkMan
2018-07-11 13:34:00 +08:00
你先看看 Netty 权威指南,估计你看书后就不会来问这种问题了
mortonnex
2019-02-14 18:02:02 +08:00
挖个坟

个人觉得 https://stackoverflow.com/questions/22354135/in-netty4-why-read-and-write-both-in-outboundhandler 这里面的回答非常好, outboundHandler 可以理解为人为的外部操作, 而 netty 启动的时候,如果没有设置 autoRead, 那么 netty 不会去 read,所以这时候需要认为"驱动"netty 去 read, 所以 outboundHandler 里面有 read 方法,这个方法传递到最后其实是 header, 然后会注册 interestOps 为 OP_READ,从而监听读事件

同时注意:netty 在每完成一次读之后,都会 removeReadOp()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/469858

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX