gpt4 book ai didi

tcp - 如何编写一个高性能的 Netty 客户端

转载 作者:可可西里 更新时间:2023-11-01 02:29:48 24 4
gpt4 key购买 nike

我想要一个非常高效的 TCP 客户端来发送 google protocol buffer 消息。我一直在使用 Netty 库开发服务器/客户端。

在测试中,服务器似乎能够每秒处理多达 50 万个事务,没有太多问题,但客户端往往会达到每秒 18 万个事务的峰值。

我的客户基于 Netty 文档中提供的示例,但不同之处在于我只想发送消息而忘记了,我不想要响应(大多数示例都会得到响应)。有没有办法优化我的客户端,以便我可以获得更高的 TPS?

我的客户应该维护多个 channel ,还是我应该能够通过单个 channel 实现比这更高的吞吐量?

最佳答案

1) 如果客户端只对发送感兴趣,对接收不感兴趣,您可以始终禁用从 channel 读取,如下所示

channel.setReadable(false);

2) 通过为每个客户端设置多个客户端 channel ,您可以非常轻松地提高吞吐量,而且它也可以扩展。

3) 你可以做以下调整来提高总体性能(读/写)

  • 最好通过添加带有 OrderdMemoryAwareThreadPoolExecutor 的 EXecutionHandler(具有最佳值的最小、最大 channel 内存)来拥有类似 SEDA 的管道

    bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
    @Override
    public ChannelPipeline getPipeline() throws Exception {
    return Channels.pipeline(
    executionHandler1,//sharable
    new MessageDecoderHandler(),
    new MessageEncoderHandler(),
    executionHandler2,//sharable
    new BusinessLogicHandler1(),
    new BusinessLogicHandler2());
    }
    });
  • 将 channel 的 writeBufferHighWaterMark 设置为最佳值(确保设置大值不会造成拥塞)

    bootstrap.setOption("writeBufferHighWaterMark", 10 * 64 * 1024);

  • 设置 SO_READ、SO_WRITE 缓冲区大小

    bootstrap.setOption("sendBufferSize", 1048576);
    bootstrap.setOption("receiveBufferSize", 1048576);

  • 启用 TCP 无延迟

    bootstrap.setOption("tcpNoDelay", true);

关于tcp - 如何编写一个高性能的 Netty 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8444267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com