我有一台使用Netty的UDP服务器。
架构非常简单:
启动时,会创建并绑定一个Channel
。管道由一个处理程序组成,该处理程序将传入的UDP数据包分派给线程池。因此,UDP数据包同时处理。处理UDP分组涉及一些IO(例如,访问数据库)。处理完UDP数据包后,会发回响应。
我正在寻找提高性能的信息,因为服务器不能满足我们的吞吐量要求。
我的一些代码:
Bootstrap bootstrap = new Bootstrap()
.group(new EpollEventLoopGroup(1))
.channel(EpollDatagramChannel.class)
/* Is the following allocator recommended? */
.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
.handler(channelInitializer);
ChannelFuture future = bootstrap.bind(host, port).await();
我的遗嘱执行人服务:
executorService = new ThreadPoolExecutor(
nbWorkerThreads, /* Optimal number of threads? */
nbWorkerThreads,
0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
我用来发送回复的代码:
ctx.channel().writeAndFlush(new DatagramPacket(Unpooled.wrappedBuffer(bytes), ctx.sender()));