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

如何允许与Netty更多的并发客户端连接?

如何解决《如何允许与Netty更多的并发客户端连接?》经验,为你挑选了1个好方法。

首先,感谢伟大图书馆的所有Netty贡献者.我已经愉快地使用了几个星期.

最近,我开始加载测试我的系统,但现在我遇到了Netty的一些可扩展性问题.我试图尽可能多地同时使用Netty客户端连接到Netty服务器.对于少量客户端(<50),系统工作正常.但是,对于大量客户端(> 100),我发现客户端总是提示"ClosedChannelException":

java.nio.channels.ClosedChannelException在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ 1.operationComplete(NioClientSocketPipelineSink.java:157)在org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:381)在在org.jboss.netty.channel.AbstractChannel $ ChannelCloseFuture org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:367)在org.jboss.netty.channel.DefaultChannelFuture.setSuccess(DefaultChannelFuture.java:316) .setClosed(AbstractChannel.java:351)在org.jboss.netty.channel.AbstractChannel.setClosed(AbstractChannel.java:188)在org.jboss.netty.channel.socket.nio.NioSocketChannel.setClosed(NioSocketChannel.java:146 )在org.jboss.netty.channel.socket.nio.NioWorker.close(NioWorker.java:592)在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.close(NioClientSocketPipelineSink.java:415)在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.processConnectTimeout(NioCl ientSocketPipelineSink.java:379)在org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink $ Boss.run(NioClientSocketPipelineSink.java:299)在org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)在在java.util.concurrent.ThreadPoolExecutor中的$工人org.jboss.netty.util.internal.DeadLockProofWorker $ 1.run(DeadLockProofWorker.java:44)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110).在java.lang.Thread.run上运行(ThreadPoolExecutor.java:603)(Thread.java:722)

我想知道如何让Netty支持更多的同步客户端连接,例如10K.我使用的是最新版本的Netty.以下是测试场景:

每个客户端向服务器发送一个四字母字符串,服务器处理程序在收到字符串后不执行任何操作.每个服务器和客户端都运行在具有八核和16GB内存的高性能计算机上.这两台机器通过技嘉网络连接.

你有什么提示吗?



1> Jestan Niroj..:

1)您可以在客户端引导程序中调整connectTimeout以确保没有网络/服务器问题

clientBootStrap.setOption("connectTimeoutMillis", optimumTimout);

2)通过在Netty服务器中设置积压值,可以增加传入连接大小的队列,这样客户端就有更好的机会连接到服务器

serverBootStrap.setOption("backlog", 1000);

3)您已经说过,您的应用程序同时创建了许多连接,如果应用程序连接速度太快,Client Boss线程可能会落后.

Netty 3.2.7 Final允许在NioClientSocketChannelFactory构造函数中设置多个Client Boss线程以避免此问题.

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