• Netty(一):netty的入门使用。


    Netty的入门基本使用流程代码,不做具体分析。使用版本为Netty 4.x版本。

    服务端调用示例:

      绑定端口号为8080端口

     1 package com.cllover;
     2 
     3 import com.sun.webkit.EventLoop;
     4 import io.netty.bootstrap.ServerBootstrap;
     5 import io.netty.channel.ChannelFuture;
     6 import io.netty.channel.EventLoopGroup;
     7 import io.netty.channel.nio.NioEventLoopGroup;
     8 import io.netty.channel.socket.nio.NioServerSocketChannel;
     9 
    10 public class Server {
    11     public static void main(String[] args) {
    12 
    13         //接受连接
    14         EventLoopGroup parentEventLoopGroup = new NioEventLoopGroup();
    15         EventLoopGroup childEventLoopGroup = new NioEventLoopGroup();
    16 
    17         try {
    18             //入口
    19             ServerBootstrap serverBootstrap = new ServerBootstrap();
    20             serverBootstrap.group(parentEventLoopGroup,childEventLoopGroup).
    21                 channel(NioServerSocketChannel.class).childHandler(new Init());
    22         //绑定运行端口
    23             ChannelFuture channelFuture = serverBootstrap.bind(8080).sync();
    24             channelFuture.channel().closeFuture().sync();
    25         } catch (InterruptedException e) {
    26             e.printStackTrace();
    27         }finally {
    28             //连接关闭
    29             parentEventLoopGroup.shutdownGracefully();
    30             childEventLoopGroup.shutdownGracefully();
    31         }
    32 
    33 
    34     }
    35 }

     Init:初始化类

     1 package com.cllover;
     2 
     3 import io.netty.channel.ChannelInitializer;
     4 import io.netty.channel.ChannelPipeline;
     5 import io.netty.channel.socket.SocketChannel;
     6 import io.netty.handler.codec.http.HttpServerCodec;
     7 
     8 public class Init extends ChannelInitializer<SocketChannel> {
     9 
    10     @Override
    11     protected void initChannel(SocketChannel ch) throws Exception {
    12         ChannelPipeline pipeline = ch.pipeline();
    13         pipeline.addLast("httpServerCode",new HttpServerCodec());
    14         pipeline.addLast("httpServerHandler",new HttpServerHandler());
    15 
    16     }
    17 }

    HttpServerHandler:自定义服务端处理器

     1 package com.cllover;
     2 
     3 import io.netty.buffer.ByteBuf;
     4 import io.netty.buffer.Unpooled;
     5 import io.netty.channel.ChannelHandlerContext;
     6 import io.netty.channel.SimpleChannelInboundHandler;
     7 import io.netty.handler.codec.http.*;
     8 import io.netty.util.CharsetUtil;
     9 
    10 
    11 public class HttpServerHandler extends SimpleChannelInboundHandler<HttpObject> {
    12 
    13     /*
    14     * 数据处理方法
    15     * */
    16     @Override
    17     protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
    18 
    19         if (msg instanceof HttpRequest) {
    20             ByteBuf byteBuf = Unpooled.copiedBuffer("Hello World!", CharsetUtil.UTF_8);
    21             FullHttpResponse fullHttpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,
    22                     HttpResponseStatus.OK, byteBuf);
    23 
            //加入头信息 24 fullHttpResponse.headers().set(HttpHeaderNames.ACCEPT_CHARSET, "UTF_8"); 25 fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain"); 26 fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_LENGTH, byteBuf.readableBytes()); 27 ctx.writeAndFlush(fullHttpResponse); 28 } 29 } 30 }

    运行方式:

    1. 在本机windows/子系统linux上输入:curl locaclhost:8080

      2.在浏览器输入localhost:8080

    头信息:

  • 相关阅读:
    C++多态性的总结
    php 基于curl 实现,模拟多线程任务
    php 解决跨域问题
    vue-cli 使用步骤
    php 图片转成base64 前后台示例
    jq 实现选项卡效果
    javascript仿es6的map类
    PHP生成word并可下载
    vue 实现的树形菜单
    vue之路由的基本用法
  • 原文地址:https://www.cnblogs.com/CllOVER/p/13414772.html
Copyright © 2020-2023  润新知