java请求大量延迟_java – Netty:如何减少来自服务器的连续消息之间的延迟?...

我是开发团队的一个使用Netty的套接字服务器.当客户端发送请求,并且服务器发送单个响应时,往返时间非常快. (好)我们最近注意到,如果来自客户端的请求触发来自服务器的两条消息,即使服务器几乎同时将两条消息写入客户端,第一条和第二条消息之间的延迟也会超过200毫秒到达远程客户端.使用本地客户端时,两条消息同时到达.如果远程客户端在来自服务器的第二个消息到达之前发送另一个请求,则立即发送该第二个消息,但是来自新请求的两个消息都以超过200ms的延迟发送.

由于在使用Netty 3.3.1时发现它,我尝试升级到Netty 3.6.5,但我仍然看到相同的行为.我们使用的是NIO,而不是OIO,因为我们需要能够支持大量的并发客户端.

我们需要配置一个可以减少200毫秒延迟的设置吗?

编辑以添加代码段.我希望这些是最相关的部分.

@Override

public boolean openListener(final Protocol protocol,

InetSocketAddress inetSocketAddress) throws Exception {

ChannelFactory factory = new NioServerSocketChannelFactory(

Executors.newCachedThreadPool(),

Executors.newCachedThreadPool(),

threadingConfiguration.getProcessorThreadCount());

ServerBootstrap bootstrap = new ServerBootstrap(factory);

final ChannelGroup channelGroup = new DefaultChannelGroup();

bootstrap.setPipelineFactory(new ChannelPipelineFactory() {

.... lots of pipeline setup snipped ......

});

Channel channel = bootstrap.bind(inetSocketAddress);

channelGroup.add(channel);

channelGroups.add(channelGroup);

bootstraps.add(bootstrap);

return true;

}

编写器工厂使用ChannelBuffers.dynamicBuffer(defaultMessageSize)作为缓冲区,当我们编写消息时,它是Channels.write(channel,msg).

还有什么有用的?将代码迁移到Netty的开发人员目前无法使用,我正在尝试填写.

解决方法:

200毫秒击中我作为Nagle算法的神奇数字.尝试在两侧将TcpNoDelay设置为true.

这是您为服务器端设置选项的方法.

serverBootstrap.setOption("child.tcpNoDelay", true);

这是为了客户端.

clientBootStrap.setOption("tcpNoDelay", true);

标签:java,sockets,delay,netty

来源: https://codeday.me/bug/20190725/1534862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值