55 private static final Logger logger = LogManager.getLogger(
NetworkService.class);
57 public void start(
int port)
throws Exception {
58 logger.info(
"Starting network service on port: " + port);
60 ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.DISABLED);
61 final EventLoopGroup bossGroup = Epoll.isAvailable() ?
new EpollEventLoopGroup(1) :
new NioEventLoopGroup(1);
62 final EventLoopGroup workerGroup = Epoll.isAvailable() ?
new EpollEventLoopGroup() :
new NioEventLoopGroup();
65 ServerBootstrap b =
new ServerBootstrap();
66 b.group(bossGroup, workerGroup)
67 .channel(Epoll.isAvailable() ? EpollServerSocketChannel.class : NioServerSocketChannel.class)
68 .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
69 .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
70 .childOption(ChannelOption.TCP_NODELAY,
true)
71 .childOption(ChannelOption.AUTO_READ,
true)
72 .childOption(ChannelOption.WRITE_BUFFER_WATER_MARK,
new WriteBufferWaterMark(2 << 16, 2 << 18))
73 .childOption(ChannelOption.SO_SNDBUF, 65536)
74 .childOption(ChannelOption.SO_RCVBUF, 65536)
75 .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30_000)
76 .childOption(ChannelOption.IP_TOS,
Config.IP_TOS)
79 ChannelFuture f = b.bind(port).syncUninterruptibly();
83 logger.info(String.format(
"Server built successfully (took %d seconds).",
OSRoyale.UPTIME.elapsedTime(TimeUnit.SECONDS)));
85 f.channel().closeFuture().sync();
86 }
catch (Exception ex) {
87 logger.error(
"error starting network service.", ex);
89 bossGroup.shutdownGracefully();
90 workerGroup.shutdownGracefully();