31 public void start(
int port)
throws Exception {
32 logger.info(
"Starting network service on port: " + port);
34 ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.DISABLED);
35 final EventLoopGroup bossGroup = Epoll.isAvailable() ?
new EpollEventLoopGroup(1) :
new NioEventLoopGroup(1);
36 final EventLoopGroup workerGroup = Epoll.isAvailable() ?
new EpollEventLoopGroup() :
new NioEventLoopGroup();
39 ServerBootstrap b =
new ServerBootstrap();
40 b.group(bossGroup, workerGroup)
41 .channel(Epoll.isAvailable() ? EpollServerSocketChannel.class : NioServerSocketChannel.class)
42 .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
43 .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
44 .childOption(ChannelOption.TCP_NODELAY,
true)
45 .childOption(ChannelOption.AUTO_READ,
true)
46 .childOption(ChannelOption.WRITE_BUFFER_WATER_MARK,
new WriteBufferWaterMark(2 << 16, 2 << 18))
47 .childOption(ChannelOption.SO_SNDBUF, 65536)
48 .childOption(ChannelOption.SO_RCVBUF, 65536)
49 .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30_000)
53 ChannelFuture f = b.bind(port).syncUninterruptibly();
59 f.channel().closeFuture().sync();
60 }
catch (Exception ex) {
61 logger.error(
"error starting network service.", ex);
63 bossGroup.shutdownGracefully();
64 workerGroup.shutdownGracefully();