netty - 对于 ServerBootstrap 和 Bootstrap 使用相同的 netty EventLoopGroup 是一个好主意吗?

标签 netty nio event-loop

有一个小Netty Best Practice Guide Norman Maurer 提出,建议尽可能重用 NioEventLoopGroup,更准确地说,指南指出

Re-use EventLoopGroup if you can!

就我而言,我编写了一个应用程序,将金融报价数据多路传输到一组连接的 Web 套接字客户端。目前存在三个 Bootstrap ,目前所有 Bootstrap 都使用单独的 NioEventLoopGroup:

  • 1 x ServerBootStrap 处理连接的 Web 套接字。
  • 1 x Bootstrap 连接到 ServerBootStrap。
  • 2 个针对不同报价数据源(远程服务器)的 Bootstrap。

阅读这张特定的幻灯片,我只需创建一次 NioEventLoopGroup 并将其用于所有列出的 BootStrap。

问题是,我不知道这是否是一个好主意,也不知道是否有任何限制。引用中说“如果可以的话,重复使用!”但我不知道这个说法暗示的局限性。

陈述一些数字:ServerBootStrap 应该处理大约 10k 连接的 Web 套接字客户端。数据源将保持不变,因此与远程服务器有 2 个保持事件连接。

欢迎任何评论!

最佳答案

总的来说,这完全没问题。只要你不在任何地方进行任何阻塞操作。使用相同的 EventLoopGroup 可能会节省一些内存,也许还有一些 CPU。这实际上取决于您的用例。

但是,就您而言,我更愿意使用 2 个 EventLoopGroup。 1 用于 ServerBootstrap,1 用于 Bootstrap。这是因为在高负载的情况下(10k Web 套接字似乎喜欢可能的高负载),您会更容易检测到瓶颈。至少您可以确定问题不是来自 Bootstrap 连接。

我这么说是因为最近我不得不将单个 EventLoopGroup 拆分为两个完全相同的情况,以便找到 CPU 使用率高的原因。

关于netty - 对于 ServerBootstrap 和 Bootstrap 使用相同的 netty EventLoopGroup 是一个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134860/

相关文章:

ssl - JBoss 网络 : Support for SNI (Server Name Indication)

java - 如何使用 io.netty.handler.codec.http.multipart.HttpPostRequestEncoder FinalizeRequest

java - 在单独线程上处理请求后写入非阻塞 NIO UDP (DatagramChannel) 套接字

Java异步客户端,意外行为

javascript - nodejs(libuv)事件循环是否在一个阶段(队列)中执行所有回调,然后再移动到下一个阶段或以循环方式运行?

滚动控制台窗口时 Node.js 停止

netty - 使用netty对大对象进行非阻塞写入

java - Netty和JDK版本冲突

java - 是否有必要关闭一个 Netty ChunkedInput?

java - 具有异步支持的基于连接池的 Web 服务器与基于事件循环的 Web 服务器