workerGroup = new NioEventLoopGroup();
bossGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup,workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG,100)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>() {
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline().addLast(new HttpResponseEncoder());
socketChannel.pipeline().addLast(new HttpRequestDecoder());
socketChannel.pipeline().addLast(new HttpServerInboundHandler());
}
}).childOption(ChannelOption.SO_KEEPALIVE, true);
//绑定端口,同步等待
future = b.bind(Integer.parseInt(meta.getPort())).sync();
/////////////////////////////////////////////////////////////
public class HttpServerInboundHandler extends ChannelInboundHandlerAdapter {
private HttpRequest request;
public HttpServerInboundHandler() {
super();
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpRequest) {
request = (HttpRequest) msg;
} else if (msg instanceof HttpContent) {
HttpContent content = (HttpContent) msg;
ByteBuf buf = content.content();
String result = buf.toString(io.netty.util.CharsetUtil.UTF_8);
buf.release();
String res = "{\"status\":0,\"message\":\"ok\"}";
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK,
Unpooled.wrappedBuffer(res.getBytes("UTF-8")));
response.headers().set(CONTENT_TYPE, "text/plain");
response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
ctx.write(response);
ctx.flush();
} else {
}
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
ctx.flush();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
ctx.close();
}
}
来源:oschina
链接:https://my.oschina.net/u/83492/blog/3001909