JT 808 协议协议分析:
Netty 启动流程分析:
代码实现:
int port = Integer.parseInt(this.configService.getJt808ServerPort());
// bossGroup 线程组用于接收客户端的连接 nThreads = 0时,使用默认的线程数 DEFAULT_EVENT_LOOP_THREADS
bossGroup = new NioEventLoopGroup(0, new DefaultThreadFactory("JT808ServerBossGroup"));
// workerGroup线程用于处理每个连接的读写 nThreads = 0时,使用默认的线程数 DEFAULT_EVENT_LOOP_THREADS
workerGroup = new NioEventLoopGroup(0, new DefaultThreadFactory("JT808ServerWorkerGroup"));
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup);
b.channel(NioServerSocketChannel.class);
// RCVBUF_ALLOCATOR 用于设置接收缓冲区内存分配器。
// AdaptiveRecvByteBufAllocator 是一种自适应的接收字节缓冲区分配器。 默认值 64字节(1/16M), 2048字节(2M), 65536字节(64M)
b.childOption(ChannelOption.RCVBUF_ALLOCATOR, new AdaptiveRecvByteBufAllocator(64, 2048, 65536));
// Handler 为 ChannelInitializer<SocketChannel> 实例,有连接时执行 实例的 initChannel 方法
b.childHandler(jt808ServerInitializer);
// 服务器绑定端口监听
future = b.bind(port).sync();
future.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}