Java 具有持久连接的NioEventLoopGroup的线程数

Java 具有持久连接的NioEventLoopGroup的线程数,java,sockets,tcp,netty,nio,Java,Sockets,Tcp,Netty,Nio,我想使用JavaNetty为来自客户端的大量持久连接创建一个TCP服务器。换句话说,想象一下有1000个客户端设备,所有这些设备都创建并维护到TCP服务器的持久连接。将有一个合理的流量(主要是文本行)在每个持久连接之间来回移动。如何确定NioEventLoopGroup的boss组和工作组中使用的最佳线程数 我的理解是,在创建连接时,Netty会创建一个SimpleChannelInboundHandler对象来处理连接。创建连接时,将调用处理程序channelActive方法,每次从客户端获取

我想使用JavaNetty为来自客户端的大量持久连接创建一个TCP服务器。换句话说,想象一下有1000个客户端设备,所有这些设备都创建并维护到TCP服务器的持久连接。将有一个合理的流量(主要是文本行)在每个持久连接之间来回移动。如何确定NioEventLoopGroup的boss组和工作组中使用的最佳线程数

我的理解是,在创建连接时,Netty会创建一个
SimpleChannelInboundHandler
对象来处理连接。创建连接时,将调用处理程序
channelActive
方法,每次从客户端获取新消息时,将调用方法
messageReceived
(或Netty 4.0.24中的
channelRead0
方法)

  • 我的理解正确吗

  • 如果在messageReceived中运行长时间运行的代码,会发生什么- 我需要在另一个线程中启动此代码吗 (java.util.Thread)

  • 如果我的messageReceived方法阻塞了某个内容或 需要很长时间才能完成?那会不会让内蒂陷入困境 停下来

  • 基本上,我需要编写一个TCP套接字服务器,它可以尽快为大量持久连接提供服务

  • 关于
    NioEventLoopGroup
    的线程数量以及如何使用处理程序中的任何线程,是否有任何指导

  • 非常感谢您提供的任何帮助。

    我如何确定NioEventLoopGroup的boss组和工作组中使用的最佳线程数

    • 关于Boss线程,如果您说您需要持久连接,那么使用大量Boss线程是没有意义的,因为Boss线程只负责接受新连接。所以我只会使用一个boss线程
    • 工作线程的数量应取决于处理器内核
    不要忘记添加-XmsYYYYM-XmxYYYYM作为VM属性,因为如果没有它们,当JVM没有使用所有内核时,您可能会遇到这种情况

    如果我要在messageReceived中运行长时间运行的代码,会发生什么?我是否需要在另一个线程(java.util.thread)中启动此代码

    • 你真的需要这么做吗?也许你应该考虑用另一种方式来做你的逻辑,如果不是,那么你应该考虑OIO和每个连接的新线程。
    如果我的messageReceived方法阻塞了某些内容或需要很长时间才能完成,会发生什么情况

    • 您应该避免在处理程序中使用线程阻塞操作
    那会不会让内蒂痛苦地停下来

    • 是的,是的

    @Maksym我在这里问了一个类似的后续问题,想请您回答: