Netty-Server
Netty服务端初始化
一般需要两个线程组,一个是用来管理接受新线程的线程组(Boss),一个是处理每条连接的读写数据的线程组(Worker),可以理解成老板出去接活,员工干细活。所以服务端的创建关键代码如下:
1 | public class NettyServer { |
常用方法
handler()方法和childHandler()
- handler()一般是对服务端启动过程中的一些业务逻辑处理
- childHandler()一般是处理新连接的数据的读写逻辑处理
attr()方法和childAttr()方法
- attr()方法可以给服务端的channel自定义属性,实际上就是通过一个map维护不同的channel
- childAttr()可以给每一条连接指定自定义属性,后续我们可以通过
channel.attr()
取出该属性。
应用场景:
- 认证状态跟踪:您可以使用
childAttr()
来存储每个客户端连接的身份认证状态,以确保只有经过认证的客户端可以访问服务器资源。 - 客户端会话信息:如果您的服务器需要跟踪每个客户端的会话信息,您可以使用
childAttr()
来存储会话数据,以便在处理客户端请求时访问它们。 - 全局配置:
attr()
方法可用于存储服务器级别的全局配置,例如监听端口号或服务器的标识。 - 连接统计:您可以使用
attr()
和childAttr()
来记录连接的统计信息,例如连接的数量、连接的类型等。
childOption()方法和option()方法
childOption()
可以给每条连接设置一些TCP底层相关的属性,比如上面,我们设置了两种TCP属性,其中ChannelOption.SO_KEEPALIVE
表示是否开启TCP底层心跳机制,true为开启ChannelOption.TCP_NODELAY
表示是否开启Nagle算法,true表示关闭,false表示开启,通俗地说,如果要求高实时性,有数据发送时就马上发送,就关闭,如果需要减少发送次数减少网络交互,就开启。
option()
方法可以给服务端channel设置一些属性,最常见的就是so_backlog,如下设置1
serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024)
表示系统用于临时存放已完成三次握手的请求的队列的最大长度,如果连接建立频繁,服务器处理创建新连接较慢,可以适当调大这个参数
bind()方法
- 是一个异步方法,返回一个
ChannelFuture
可以通过给ChannelFuture
添加一监听器GenericFutureListener
监听端口,在这个监听器的operationComplete
方法里面监听绑定是否成功。
1 | serverBootstrap.bind(8000).addListener(new GenericFutureListener<Future<? super Void>>() { |
总结
- 先创建引导类,指定线程模型,IO模型,连接读写处理逻辑,绑定端口即可启动服务端。
- 可以给channel设置一些属性值,设置底层TCP参数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HUT菜鸟小八的博客!
评论