• netty 网关 http请求 请求转发


    https://netty.io/4.1/xref/io/netty/example/proxy/package-summary.html

    https://netty.io/4.1/xref/io/netty/example/proxy/HexDumpProxy.html

    package com.test;

    import io.netty.channel.ChannelInitializer;
    import io.netty.channel.socket.SocketChannel;
    import io.netty.handler.logging.LogLevel;
    import io.netty.handler.logging.LoggingHandler;

    public class HexDumpProxyInitializer extends ChannelInitializer<SocketChannel> {
    private final String remoteHost;
    private final int remotePort;

    public HexDumpProxyInitializer(String remoteHost, int remotePort) {
    this.remoteHost = remoteHost;
    this.remotePort = remotePort;
    }

    @Override
    public void initChannel(SocketChannel ch) {
    // 获取当前类名;
    System.out.println(this.getClass());
    ch.pipeline().addLast(
    new LoggingHandler(LogLevel.INFO),
    new HexDumpProxyInitializer(remoteHost, remotePort)
    );
    }
    }


    package com.test;

    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.channel.ChannelOption;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioServerSocketChannel;
    import io.netty.handler.logging.LogLevel;
    import io.netty.handler.logging.LoggingHandler;

    public class HexDumpProxy {
    static final int LOCAL_PORT = Integer.parseInt(System.getProperty("localPort", "8443"));
    static final String REMOTE_HOST = System.getProperty("remoteHost", "11.21.1.2");
    static final int REMOTE_PORT = Integer.parseInt(System.getProperty("remotePort", "50000"));

    public static void main(String[] args) throws Exception {
    System.err.println("Proxying *:" + LOCAL_PORT + " to " + REMOTE_HOST + ":" + REMOTE_PORT + "...");
    // Configure the bootstrap
    EventLoopGroup bossGroup = new NioEventLoopGroup(1);
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
    ServerBootstrap b = new ServerBootstrap();
    b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
    .handler(new LoggingHandler(LogLevel.INFO))
    .childHandler(new HexDumpProxyInitializer(REMOTE_HOST, REMOTE_PORT))
    .childOption(ChannelOption.AUTO_READ, false)
    .bind(LOCAL_PORT).sync().channel().closeFuture().sync();
    } finally {
    bossGroup.shutdownGracefully();
    workerGroup.shutdownGracefully();
    }
    }
    }






  • 相关阅读:
    c++中利用宏定义简化for循环使用
    UVA1152- 枚举 /二分查找
    acm 模板
    Xwindow的文章
    编程语言博客
    csh与bash比较
    关于锁与并发的资料总结
    linux su和sudo命令的区别
    对Memcached使用的总结和使用场景
    iptables配置——NAT地址转换
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9947032.html
Copyright © 2020-2023  润新知