| public class TestServer { |
| public static void main(String[] args) throws Exception { |
| |
| EventLoopGroup bossGroup = new NioEventLoopGroup(1); |
| EventLoopGroup workerGroup = new NioEventLoopGroup(); |
| |
| try { |
| ServerBootstrap serverBootstrap = new ServerBootstrap(); |
| |
| serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler( |
| new com.ychen.netty.netty.http.TestServerInitializer()); |
| |
| ChannelFuture channelFuture = serverBootstrap.bind(8889).sync(); |
| |
| channelFuture.channel().closeFuture().sync(); |
| |
| }finally { |
| bossGroup.shutdownGracefully(); |
| workerGroup.shutdownGracefully(); |
| } |
| } |
| } |
| public class TestServerInitializer extends ChannelInitializer<SocketChannel> { |
| |
| @Override |
| protected void initChannel(SocketChannel ch) throws Exception { |
| |
| |
| |
| ChannelPipeline pipeline = ch.pipeline(); |
| |
| |
| |
| pipeline.addLast("MyHttpServerCodec",new HttpServerCodec()); |
| |
| pipeline.addLast("MyTestHttpServerHandler", new com.ychen.netty.netty.http.TestHttpServerHandler()); |
| |
| System.out.println("ok~~~~"); |
| |
| } |
| } |
| public class TestHttpServerHandler extends SimpleChannelInboundHandler<HttpObject> { |
| |
| |
| @Override |
| protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception { |
| |
| |
| if(msg instanceof HttpRequest) { |
| System.out.println("msg 类型=" + msg.getClass()); |
| System.out.println("客户端地址" + ctx.channel().remoteAddress()); |
| |
| |
| ByteBuf content = Unpooled.copiedBuffer("hello, 我是服务器", CharsetUtil.UTF_8); |
| |
| |
| FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, content); |
| |
| response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain"); |
| response.headers().set(HttpHeaderNames.CONTENT_LENGTH, content.readableBytes()); |
| |
| |
| ctx.writeAndFlush(response); |
| } |
| } |
| |
| } |
| |
| http://localhost:8889/ |
| |
| |
| ok~~~~ |
| msg 类型=class io.netty.handler.codec.http.DefaultHttpRequest |
| 客户端地址/0:0:0:0:0:0:0:1:60532 |
| msg 类型=class io.netty.handler.codec.http.DefaultHttpRequest |
| 客户端地址/0:0:0:0:0:0:0:1:60532 |
| |
| |

| # 处理器中添加如下 |
| HttpRequest httpRequest = (HttpRequest) msg; |
| |
| URI uri = new URI(httpRequest.uri()); |
| if("/favicon.ico".equals(uri.getPath())) { |
| System.out.println("请求了 favicon.ico, 不做响应"); |
| return; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-08-08 Sentinel限流、降级配置详解
2021-08-08 导入项目后报错问题
2021-08-08 Redis入门(三):新数据类型