共计 1437 个字符,预计需要花费 4 分钟才能阅读完成。
netty 服务端的初始化
// 类加载初始化办法
@PostConstruct
public void start() {
try {
// 创立 netty 服务器对象
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
bootstrap.option(ChannelOption.TCP_NODELAY, true);
bootstrap.group(boss, work);
bootstrap.channel(NioServerSocketChannel.class);
bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
bootstrap.childHandler(myChannelInitializer);
logger.info("netty 服务器启动");
ChannelFuture future = bootstrap.bind(port).sync();
//ChannelFuture future2 = bootstrap.bind(port2).sync();} catch (InterruptedException e) {logger.error("服务器启动失败");
// 当服务器启动失败得时候由 netty 的调度性能来敞开 netty 的服务器
work.shutdownGracefully();
boss.shutdownGracefully();}
}
1.(ChannelOption.SO_BACKLOG, 1024)
示意标识当服务器申请解决线程全满时,用于长期寄存已实现 [三次握手] 的申请的队列的最大长度。如果未设置或所设置的值小于 1,Java 将应用默认值为 50
2.(ChannelOption.TCP_NODELAY, true)
TCP_NODELAY 就是用于启用或对于 [Nagle 算法],如果要求高实时性,有数据发送时就马上发送,就将该选项设置为 true 敞开[Nagle 算法],如果要缩小发送次数缩小网络交互,就设置为 false 等累积肯定大小后再发送。默认为 false。
3.bootstrap.group(boss, work);
是初始化两个线程,一个线程负责承受新的连贯,一个负责解决读写;是开启了;
核心思想:轮询,没有连贯立即返回不要耽搁其余的客户端连贯,不会阻塞;一个线程不会浪费资源;
4.bootstrap.channel(NioServerSocketChannel.class);
申明利用反射机制来获取 NioServerSocketChannel 失去实例
5.bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
当设置为 true 的时候,TCP 会实现监控连贯是否无效,当连贯处于闲暇状态的时候,超过了 2 个小时,本地的 TCP 实现会发送一个数据包给近程的 socket,如果近程没有发回响应,TCP 会继续尝试 11 分钟,晓得响应为止,如果在 12 分钟的时候还没响应,TCP 尝试敞开 socket 连贯
6.bootstrap.childHandler(myChannelInitializer);
初始化客户端 Handler~~~~
7.ChannelFuture future = bootstrap.bind(port).sync()
为服务端 netty 绑定端口