当前位置:  开发笔记 > 前端 > 正文

如何编写高性能的Netty客户端

如何解决《如何编写高性能的Netty客户端》经验,为你挑选了1个好方法。

我想要一个非常有效的TCP客户端来发送谷歌协议缓冲消息.我一直在使用Netty库来开发服务器/客户端.

在测试中,服务器似乎能够每秒处理多达500k的事务,而不会遇到很多问题,但客户端往往会以每秒180k的事务数达到峰值.

我的客户端基于Netty文档中提供的示例,但区别在于我只想发送消息而忘记,我不想要响应(大多数示例都得到了).无论如何都要优化我的客户端,以便我可以实现更高的TPS?

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



1> Jestan Niroj..:

1)如果客户只对发送感兴趣,而不是接收,则可以始终禁用如下所示的频道阅读

channel.setReadable(false);

2)通过为每个客户端提供多个客户端通道,您可以非常轻松地提高吞吐量,并且它也可以扩展.

3)您可以进行以下调整以提高性能(对于读/写)

通过添加带有OrderdMemoryAwareThreadPoolExecutor的EXecutionHandler(具有最佳值的最小,最大通道内存),可以更好地拥有像pipline这样的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());
    }
});

将通道的writeBufferHighWaterMark设置为最佳值(确保设置较大的值不会产生拥塞)

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

设置SO_READ,SO_WRITE缓冲区大小

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

启用TCP无延迟

bootstrap.setOption("tcpNoDelay", true);

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有