java – Netty:如何减少来自服务器的连续消息之间的延迟?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Netty:如何减少来自服务器的连续消息之间的延迟?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1801字,纯文字阅读大概需要3分钟。
内容图文
我是开发团队的一个使用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);
进一步阅读:http://www.stuartcheshire.org/papers/NagleDelayedAck/
内容总结
以上是互联网集市为您收集整理的java – Netty:如何减少来自服务器的连续消息之间的延迟?全部内容,希望文章能够帮你解决java – Netty:如何减少来自服务器的连续消息之间的延迟?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。