private final static Logger logger = LoggerFactory.getLogger(ResourceStatusReceiver.class);
private static Bootstrap b = new Bootstrap();
public static void start() throws Exception {
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
// b = new Bootstrap(); // (1)
b.group(workerGroup); // (2)
b.channel(NioSocketChannel.class); // (3)
b.option(ChannelOption.SO_KEEPALIVE, true); // (4)
b.option(ChannelOption.ALLOW_HALF_CLOSURE,true);
b.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
// 以("\n")为结尾分割的 解码器
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Delimiters.lineDelimiter()));
// 字符串解码 和 编码
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encoder", new StringEncoder());
// 自己的逻辑Handler
pipeline.addLast("handler", new SimpleChannelInboundHandler() {
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
logger.debug("接收到的状态内容:" + o.toString());
}
@Override
public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
logger.debug("连接成功");
}
@Override
public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
logger.debug("======channelActive========");
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
logger.debug("======channelInactive========");
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
logger.debug("======exceptionCaught========"+cause.getMessage());
}
});
}
});
// Start the client.
ChannelFuture f = b.connect("127.0.0.1",8060).sync(); // (5)
// Wait until the connection is closed.
f.channel().closeFuture().sync();
}finally{
workerGroup.shutdownGracefully();
}
}