每个连接的 Netty 多线程

2024-01-18

我是 Netty 新手。我想开发一个服务器,旨在接收来自可能少数(假设最多有 2 个)客户端的请求。但是每个客户端都会不断地向服务器发送许多请求。服务器必须处理此类请求并响应客户端。因此,在这里我假设即使我配置了多个工作线程,它也可能没有用,因为只有 2 个活动连接。工作线程再次阻塞,直到它处理并响应客户端。因此,请让我知道如何处理此类问题。 如果我在工作线程中使用threadpoolexecutor以多线程方式处理两个客户端请求,它会高效吗?或者如果可以通过netty框架实现,请让我知道如何做到这一点? 提前致谢...


如果我理解正确的话:您的客户端(2)将发送许多消息,每条消息都意味着服务器尽快做出答复。

可以看到2个选项:

  1. answear 过程的时间很短(足够短,不会成为您想要达到的速率的问题,这意味着 1 个线程能够按照 1 个客户端所需的速度进行 answear):然后您可以继续使用 Netty 的标准线程(在服务器引导程序中设置 1 个工作线程(一次用于 1 个客户端)。这是最短路径。

  2. answear进程时间不够短(速率会很可怕,比如因为有一个“长时间”的进程,比如阻塞调用、数据库访问、文件写入……):那么可以添加线程池(一组)在 Netty 管道中为您的 ChannelHandler 执行此类阻塞/长过程。

以下是从 ChannelPipeline 中摘录的 API 文档摘录:http://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html http://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html

// Tell the pipeline to run MyBusinessLogicHandler's event handler methods
// in a different thread than an I/O thread so that the I/O thread is not blocked by
// a time-consuming task.
// If your business logic is fully asynchronous or finished very quickly, you don't
// need to specify a group.
pipeline.addLast(group, "handler", new MyBusinessLogicHandler());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个连接的 Netty 多线程 的相关文章

  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 每个客户端一个线程与线程服务器的排队线程模型之间的相对优点?

    假设我们正在构建一个线程服务器 旨在在具有四个核心的系统上运行 我能想到的两种线程管理方案是每个客户端连接一个线程和一个排队系统 正如第一个系统的名称所暗示的那样 我们将为每个连接到服务器的客户端生成一个线程 假设一个线程始终专用于程序的主
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat
  • java替代Thread.stop()来中断特定调用

    我正在寻找一种方法来告诉这个调用 大约需要 20 120 秒 final Area image final AffineTransform transform new AffineTransform transform scale imag
  • Java,如何管理线程读取socket(websocket)?

    我有一个 WebSocket 服务器 我的服务器创建一个新线程来处理新连接 该线程一直处于活动状态 直到 websocket 中断 我的问题 对于 1 000 000 个连接 我需要 1 000 000 个线程 我如何通过一个线程处理多个
  • “while(true) { Thread.Sleep }”的原因是什么?

    我有时会遇到以下形式的代码 while true do something Thread Sleep 1000 我想知道这是否被认为是好的做法还是坏的做法以及是否有任何替代方案 通常我在服务的主函数中 找到 这样的代码 我最近在 Windo
  • 使用 volatile 关键字时出现内存一致性错误的示例?

    来自文档 使用易失性变量可以降低内存一致性错误的风险 但这是否意味着有时易失性变量无法正常工作 奇怪的是它的使用方式 在我看来 这是非常糟糕的代码 有时工作有时不工作 我尝试谷歌 但没有找到易失性内存一致性错误的示例 您能推荐一个吗 问题不
  • 如何使用线程使 Windows 服务长期运行

    我有一个 win 服务托管一些我需要保持长时间运行的工作流程 一个 WorkflowApplication 和一个 WorkflowServiceHost 因为 OnStart 要求它完成并返回操作系统 所以我有一个在线程池中的另一个线程上
  • Java 中的 LRU 缓存实现

    我看过下面的代码 我认为addElement方法的实现中有一个无用的while循环 它永远不应该有比 size 1 更多的元素 因为已经有一个写锁 那么为什么 addElement 方法会删除元素直到它达到这个条件 真的 while con
  • 从辅助线程重定向标准输出(使用函数而不是类进行多线程?)

    我正在努力让我的stdout显示在QTextEdit通过 Qt Designer PyQt5 制作 实际上我让它工作了 但它并没有在制作的同时显示信息 相反 它会等待进程完全结束 然后才会立即显示所有信息 我知道这应该通过线程来解决 也自Q
  • 异步回调到BackgroundWorker

    我想使用 NET FTP 库 http netftp codeplex com http netftp codeplex com 该库提供 BeginOpenRead string AsyncCallback object 使用异步编程模型
  • Time 方法在另一个线程中执行并在超时时中止

    您好 我正在尝试异步运行方法 以便计算持续时间并在超过超时时取消该方法 我尝试使用异步和等待来实现这一点 但没有运气 也许我过度设计了这个 任何输入都会受到赞赏 应该注意的是 我无法更改接口 TheirInterface 因此得名 到目前为
  • Spring WebFlux Netty SSL 与自签名证书错误

    我正在尝试使用服务器端的自签名证书通过本地主机中的 https 访问在 Netty 上运行的 Spring Boot 应用程序 My application properties看起来像这样 server ssl enabled true
  • 何时何地调用 EventQueue.invokeLater() 方法

    我对线程和 GUI 完全陌生 因此我不知道在哪里调用它EventQueue invokeLater 方法 我应该在每个事件监听器和其他东西中调用它吗 调用这个方法的 东西 是什么 如果是这样 是否有任何替代方法来调用一次应用到处方法 以便不
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS
  • C# 为所有对象订阅相同的事件处理程序是线程安全的吗

    我的项目中有一种情况 我连接到多个服务器并监听事件 每当从服务器接收到事件时 Handler 就应该将该事件添加到公共队列中进行处理 所有连接都应将接收到的事件添加到队列中 foreach var item in collection Co
  • nHibernate 使用 Log4Net 进行日志记录,线程会话问题

    大家好 这里有一个小问题 我正在努力解决这个问题 我目前正在开始使用 nHibernate 由于工作需要 我不得不这样做 并且我在 nHibernate 的会话和多线程方面遇到了一些困难 我想在这里完成的任务是让 Log4Net 将所有内容
  • Boost:如何创建一个线程以便可以控制它的所有标准输出、标准错误?

    我用 C 创建了一个 win32 控制台应用程序 我使用一些API 不是我的 我不能修改它的来源 它是这样写的 它会将一些信息写入控制台屏幕 而不询问 每次我调用它时 每秒 48 次 所以我想将它放入某个线程并限制其输出能力 但我需要得到当

随机推荐