我想使用Java Netty为来自客户端的大量持久连接创建TCP服务器。换句话说,成像那里有1000个客户端设备,并且所有客户端设备都创建并维护与TCP服务器的持久连接。将存在合理数量的流量(主要是文本行),这些流量在每个持久连接中来回传递。如何确定NioEventLoopGroup的boss和worker组中使用的最佳线程数?
我的理解是,在创建连接时,Netty会创建一个SimpleChannelInboundHandler对象来处理连接。创建连接后,调用处理程序channelActive方法,每次从客户端获取新消息时,都会调用messageReceived方法(或Netty 4.0.24中的channelRead0方法)。我的理解是否正确?如果我有长时间运行的代码在messageReceived中运行会发生什么 - 我是否需要在另一个线程(java.util.Thread)中启动此代码?如果我的messageReceived方法阻塞某些内容或需要很长时间才能完成,会发生什么?这会让Netty停滞不前吗?
基本上我需要编写一个TCP套接字服务器,它可以尽快为大量持久连接提供服务。是否有关于NioEventLoopGroup的线程数以及如何在处理程序中使用任何线程的指导?
非常感谢任何帮助。
答案 0 :(得分:5)
如何确定NioEventLoopGroup在boss和worker组中使用的最佳线程数?
不要忘记添加 -XmsYYYYM 和 -XmxYYYYM 作为您的VM属性,因为如果没有它们,您可以在JVM未使用时遇到问题所有核心。
如果我在messageReceived中运行长代码会发生什么 - 我是否需要在另一个线程(java.util.Thread)中启动此代码?
如果我的messageReceived方法阻止某些内容或需要很长时间才能完成,会发生什么?
这会让Netty停滞不前吗?