美文网首页
netty测试QPS

netty测试QPS

作者: 靈08_1024 | 来源:发表于2019-04-24 15:26 被阅读0次

客户端代码:

public class NettyClient {

    public static void main(String[] args) {
        Bootstrap bootstrap = new Bootstrap();
        NioEventLoopGroup group = new NioEventLoopGroup();

        bootstrap.group(group)
                .option(ChannelOption.TCP_NODELAY, true)
                .channel(NioSocketChannel.class)
                .handler(new ChannelInitializer<Channel>() {
                    @Override
                    protected void initChannel(Channel ch) throws Exception {
                        ch.pipeline().addLast(new XXCodec());
                        ch.pipeline().addLast(new FirstClientHandler());
                    }
                });

        String inetHost = "127.0.0.1";
        bootstrap.connect(inetHost, 8000)
                .addListener(future -> {
                    if (future.isSuccess()) {
                        System.out.println("客户端连接成功!");
                        Channel channel = ((ChannelFuture) future).channel();
                        startThread(channel);
                    } else {
                        System.out.println("客户端连接失败!");
                    }
                })
                .channel();
    }

    private static ExecutorService exec = Executors.newFixedThreadPool(5);

    private static void startThread(Channel channel) {
        exec.submit(() -> {
            while (true) {
                // 1. 获取数据
                ByteBuf buffer = Unpooled.buffer()
                        .writeBytes("你好!".getBytes(Charset.forName("utf-8")));
                // 2. 写数据
                ChannelFuture channelFuture = channel.writeAndFlush(buffer);
                channelFuture.sync();
            }
        });
    }
}

编解码工具(客户端和服务端是一样的,需要注意的是修改decode的读取字串长度):

public class XXCodec extends ByteToMessageCodec<String> {
    @Override
    protected void encode(ChannelHandlerContext ctx, String msg, ByteBuf out) throws Exception {
        byte[] bytes = msg.getBytes("UTF-8");
        out.writeInt(bytes.length);
        out.writeBytes(bytes);
        //在写出字节流的末尾增加\n表示数据结束
        out.writeBytes(new byte[]{'\n'});
    }

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        ByteBuf byteBuf = in.readBytes(18);
        if (in.readableBytes() >= 18) {
            String msg = byteBuf.toString(Charset.forName("utf-8"));
            out.add(msg);
        }
        if(byteBuf.refCnt()>0)
            byteBuf.release();
    }
}
@ChannelHandler.Sharable
public class FirstClientHandler extends ChannelInboundHandlerAdapter {

    private static Logger logger = LogManager.getLogger(FirstClientHandler.class);

    private static ScheduledExecutorService scheduled
            = Executors.newScheduledThreadPool(1);
    private static volatile AtomicInteger num = new AtomicInteger(0);
    
    public FirstClientHandler() throws Exception {
        scheduled.scheduleAtFixedRate(() ->
                loggerInfo(), 0, 1, TimeUnit.SECONDS);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        num.incrementAndGet();
    }

    public void loggerInfo() {
        logger.info("当前执行了{}次", num.intValue());
        num.set(0);
    }
}

在服务器端:

public class FirstServerHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        // 回复数据到客户端
        String str ="ABCD";//这部分调用生成数据的方法
        ByteBuf out = ctx.alloc().buffer()
                .writeBytes(str.getBytes(Charset.forName("utf-8")));
        ctx.channel().writeAndFlush(out);
    }
}

相关文章

  • netty测试QPS

    客户端代码: 编解码工具(客户端和服务端是一样的,需要注意的是修改decode的读取字串长度): 在服务器端:

  • 记一次netty泄露

    初次用netty来企业实战,遇到了netty泄露。 本次是用来测试某功能的QPS,但是在启动netty时,出现了如...

  • Netty入门

    本文的示例代码参考NettyBasic 目录 开始 Netty Pipeline 开始 测试 Netty 测试 P...

  • 性能测试相关工具及规范

    压力测试工具 jmeter Gatling 测试指标 吞吐(qps) .avg响应时间及.99(.999)响应时间...

  • 性能测试

    压力测试工具 jmeter Gatling 测试指标 吞吐(qps) .avg响应时间及.99(.999)响应时间...

  • 一次接口性能优化总结

    背景 公司推荐服务接口qps为230左右,与业务需求差距较大,需要对该接口进行优化提升qps。 测试 学习压测工具...

  • 常用网络协议性能调研

    1.调研目的 解决接口大并发量情况下,接口响应速度问题,提升接口QPS,主要方向在使用netty长连接、webso...

  • 服务器压力测试小记

    Jmeter压测: Http接口测试 protoBuffer+Netty自定义协议接口测试(BeanShell) ...

  • 第 9 章 单元测试

    Netty 提供了 Embedded 传输,用于测试ChannelHandler,EmbeddedChannel提...

  • Jmeter性能测试实战

    测试需求:测试20个用户访问https://www.baidu.com在负载达到30QPS时的平均响应时间。 QP...

网友评论

      本文标题:netty测试QPS

      本文链接:https://www.haomeiwen.com/subject/foeggqtx.html