LAST_ACK 5
SYN_RECV 2
CLOSE_WAIT 2
ESTABLISHED 863
FIN_WAIT1 22
FIN_WAIT2 106
TIME_WAIT 4698
when the ESTABLISHED reaches 2000, the sharp-sharp-sharp problem description is gradually increasing.
the server Aliyun 4-core 16G, run unsatisfactorily
related codes
@ Slf4j
@ Component
public class NettyServer {
private EventLoopGroup bossGroup;
private EventLoopGroup workerGroup;
@Autowired
private NettyServerConfig nettyServerConfig;
public void start() {
//bossGroup
bossGroup = new NioEventLoopGroup();
//workerGroupboss
workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup);
serverBootstrap.channel(NioServerSocketChannel.class);
serverBootstrap.childHandler(new ChannelInitializer<Channel>() {
@Override
protected void initChannel(Channel ch) throws Exception {
ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN,Integer.MAX_VALUE,0,4,2,4,true));
ch.pipeline().addLast(new IdleStateHandler(600, 600, 600, TimeUnit.SECONDS));//600
ch.pipeline().addLast("handler", new NettyServerHandler());
}
});
serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);//
ChannelFuture f = serverBootstrap.bind(nettyServerConfig.getPort()).sync();
if(f.isSuccess()){
log.info("TCP Server Start Success------Port---" + nettyServerConfig.getPort() + "");
f.channel().closeFuture().sync();
} else {
log.error("TCP Server Start Failed------Port---" + nettyServerConfig.getPort() + "");
}
} catch (Exception e) {
log.error("======nettyserver stop======", e);
stop();
}
}
public void stop(){
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
@ Slf4j
@ Service
public class NettyServerHandler extends ChannelInboundHandlerAdapter {
/**
* channelAction
*
*
*
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
//
Channel channel = ctx.channel();
//
NettyChannelManager.addTimeClear(channel);
}
/**
*
*/
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
try {
Integer roomNumber = NettyChannelUtil.getRoomNumber(ctx.channel());
if (roomNumber != null) {
//
GameNavigation gameNavigation = SpringContextHolder.getBean(GameNavigation.class);
gameNavigation.exitRoom(ctx.channel());
}
} catch (Exception e) {
log.error("channelInactive Exception", e);
}
}
/**
* @param ctx
* @param msg
* @throws Exception
*/
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
ByteBuf byteBuf = (ByteBuf) msg;
try {
int code = ByteBufUtil.readShort(byteBuf);
byte[] bytes = ByteBufUtil.readBytes(byteBuf);
GameNavigation gameNavigation = SpringContextHolder.getBean(GameNavigation.class);
RoomProducer roomRequest = new RoomProducer();
roomRequest.sendRoomRequest(code,bytes);
gameNavigation.navigation(ctx.channel(), code, bytes);
}catch (Exception e){
log.error("channelRead Exception", e);
} finally {
byteBuf.release();
}
}
/*
* exceptionCaught
*
* exception
* Caught
*
*
*
*/
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception
{
try{
if(cause.getClass() != IOException.class)
{
cause.printStackTrace();
/ / close ();
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
*
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
}
}