content: package com.taobao.arthas.grpcweb.grpc.server.httpServer;
  
  import com.alibaba.arthas.deps.org.slf4j.Logger;
  import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
  import io.netty.bootstrap.ServerBootstrap;
  import io.netty.channel.*;
  import io.netty.channel.nio.NioEventLoopGroup;
  import io.netty.channel.socket.nio.NioServerSocketChannel;
  
  import java.lang.invoke.MethodHandles;
  
  public class NettyHttpServer {
  
      private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass().getName());
  
      private int port;
  
      private final String STATIC_LOCATION;
  
  
      public NettyHttpServer(int port, String staticLocation) {
          this.port = port;
          this.STATIC_LOCATION = staticLocation;
      }
  
      public void start() throws InterruptedException {
          NioEventLoopGroup boss = new NioEventLoopGroup(1);
          NioEventLoopGroup work = new NioEventLoopGroup();
          try {
              ServerBootstrap serverBootstrap = new ServerBootstrap();
              serverBootstrap.group(boss, work)
                      .channel(NioServerSocketChannel.class)
                      .childHandler(new NettyHttpInitializer(this.STATIC_LOCATION))
                      .option(ChannelOption.SO_BACKLOG, 128)
                      .childOption(ChannelOption.SO_KEEPALIVE, true);
              logger.info("start http server on port: {}", port);
              ChannelFuture future = serverBootstrap.bind(port).sync();
              future.channel().closeFuture().sync();
          } finally {
              work.shutdownGracefully();
              boss.shutdownGracefully();
          }
      }
  }
  