com.taobao.arthas.grpcweb.proxy.server.GrpcWebProxyServer Maven / Gradle / Ivy
package com.taobao.arthas.grpcweb.proxy.server;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import com.alibaba.arthas.deps.org.slf4j.Logger;
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
import java.net.InetSocketAddress;
public final class GrpcWebProxyServer {
private static final Logger logger = LoggerFactory.getLogger(GrpcWebProxyServer.class);
private int port;
private int grpcPort;
private EventLoopGroup bossGroup;
private EventLoopGroup workerGroup;
private Channel channel;
public GrpcWebProxyServer(int port, int grpcPort) {
this.port = port;
this.grpcPort = grpcPort;
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup();
}
public void start() {
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new GrpcWebProxyServerInitializer(grpcPort));
channel = serverBootstrap.bind(port).sync().channel();
logger.info("grpc web proxy server started, listening on " + port);
System.out.println("grpc web proxy server started, listening on " + port);
channel.closeFuture().sync();
} catch (InterruptedException e) {
logger.info("fail to start grpc web proxy server!");
throw new RuntimeException(e);
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
public void close() {
if (bossGroup != null) {
bossGroup.shutdownGracefully();
}
if(workerGroup != null){
workerGroup.shutdownGracefully();
}
logger.info("success to close grpc web proxy server!");
}
public int actualPort() {
int boundPort = ((InetSocketAddress) channel.localAddress()).getPort();
return boundPort;
}
}