![跟闪电侠学Netty:Netty即时聊天实战与底层原理](https://wfqqreader-1252317822.image.myqcloud.com/cover/384/43738384/b_43738384.jpg)
4.3 服务端启动的其他方法
4.3.1 handler()方法
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt005_5.jpg?sign=1739305427-WOb4Vat3nk9BUNuoq2yTuJJYI0eQj0QO-0-76e1aaac431efdd104b1c8c6e3fdc688)
handler()方法可以和前面分析的childHandler()方法对应起来:childHandler()方法用于指定处理新连接数据的读写处理逻辑;handler()方法用于指定在服务端启动过程中的一些逻辑,通常情况下用不到这个方法。
4.3.2 attr()方法
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt005_6.jpg?sign=1739305427-dbVsExR7inAl3OIK7eoLfpMAdMdhNiVR-0-cf011b589cd880fd615b69fc9be0a47e)
attr()方法可以给服务端Channel,也就是NioServerSocketChannel指定一些自定义属性,然后通过channel.attr()取出这个属性。比如,上面的代码可以指定服务端Channel的serverName属性,属性值为nettyServer,其实就是给NioServerSocketChannel维护一个Map而已,通常情况下也用不上这个方法。
4.3.3 childAttr()方法
除了可以给服务端Channel即NioServerSocketChannel指定一些自定义属性,我们还可以给每一个连接都指定自定义属性。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt005_7.jpg?sign=1739305427-cumxGECfrKK5vFKn5L2guc8K8wcSnWFH-0-4928e53034b5f99732237f447d851920)
上面的childAttr()方法可以给每一个连接都指定自定义属性,后续我们可以通过channel.attr()方法取出该属性。
4.3.4 option()方法
option()方法可以给服务端Channel设置一些TCP参数,最常见的就是so_backlog,设置如下。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt005_8.jpg?sign=1739305427-RbXYnmXo0Zb5Bl2vDYjntoKpbYlfe8TD-0-2906c4a7bed0f852453242f638cb9d16)
这个设置表示系统用于临时存放已完成三次握手的请求的队列的最大长度,如果连接建立频繁,服务器处理创建新连接较慢,则可以适当调大这个参数。
4.3.5 childOption()方法
childOption()方法可以给每个连接都设置一些TCP参数。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt005_9.jpg?sign=1739305427-Fyudn2WkRtKlLkO0p3Sd1SjK1jdVjA2r-0-6d40f756a98f512b811ccd2ae444a303)
上述代码中设置了两种TCP参数,其中:
● ChannelOption.SO_KEEPALIVE表示是否开启TCP底层心跳机制,true表示开启。
● ChannelOption.TCP_NODELAY表示是否开启Nagle算法,true表示关闭,false表示开启。通俗地说,如果要求高实时性,有数据发送时就马上发送,就设置为关闭;如果需要减少发送次数,减少网络交互,就设置为开启。
其他参数这里就不一一讲解了,读者有兴趣可以自行研究。