option和childOption的区别?
从What is the difference between ServerBootstrap.option() and ServerBootstrap.childOption() in netty 4.x可知,前者用于设置服务器Channel,后者用于设置接收客户端连接的Channel。
option和attr区别
从netty-option和attr设置阅读可知,
option就好比object,一个对象的属性必然是可列举的。
attr就好比map,只是一个容器,可有可无,灵活多变。
option设置的属性必须是ChannelOption,你只能选择channel.config中的option,否则会报警告:
// MyServer.java
b.group(parentGroup, childGroup)
.channel(NioServerSocketChannel.class) //非阻塞模式
.option(ChannelOption.SO_BACKLOG, 128)
.option(ChannelOption.valueOf("hahaha"), 22)
.childHandler(new MyChannelInitializer());
...
Connected to the target VM, address: '127.0.0.1:59382', transport: 'socket'
七月 29, 2021 6:08:53 下午 io.netty.bootstrap.AbstractBootstrap setChannelOption
警告: Unknown channel option 'hahaha' for channel '[id: 0x536d28da]'
而Attr是用户可以自由设定的,类似于session,你甚至可以在Handler内设置它。
option的检查与匹配
为什么会报警告呢?netty如何检查option是否是预料内的呢?