当前位置: 首页 > 知识库问答 >
问题:

netty通道、线程和事件循环

何升
2023-03-14

请说明当netty server和netty client连接成代理时,请求、线程、eventloop、服务器通道和客户端通道之间的关系。在开始之前,我认为对于每个请求,netty服务器都会从eventloop获取一个工作线程,以及一个通道(绑定到工作线程,使用线程池中有限的对象ID)来处理该入站消息,并将其发送到来自netty客户端的出站通道。此后,可能的服务器<代码>频道受到限制,而客户端<代码>频道受到限制(因为出站端口是随机选择的)。然而,我的观察是:

  1. 入站通道和出站通道均不受限制。
  2. 有时不同的请求共享相同的入站通道,有时不共享。

当教程谈到使用netty作为代理时,他们总是说服务器(Serverbootstrap)中使用的相同eventloop可以用于创建客户端(bootstrap),以保存线程重载。这是什么意思?当客户端和服务器共享同一个eventloop时,它们本质上共享什么?我对此感兴趣是因为当客户端以异步方式运行时,我不知道如何将响应消息返回到其原始通道。

共有1个答案

郝君博
2023-03-14

所以你问了很多问题,我会尽力回答所有这些。。。

1) 入站和出站通道的限制需要由您自己实现,或者您依赖于您使用的操作系统设置的限制(大多数情况下是每个进程可以打开的文件描述符的数量)。

2) 通道代表一个连接,因此根据使用的协议,多个请求/响应可能共享同一个连接。例如,HTTP keep alive是HTTP/1.1的默认设置,这是可能的

为服务器和客户端共享相同的EventLoop允许使用相同的线程处理两者,这意味着您可以在两者之间传输数据,而无需上下文切换。如果您构建像代理这样的东西,这一点尤其重要。

 类似资料:
  • 我们有一个分布式应用程序,它使用Netty (4)进行底层通信。系统中进程执行多个任务。每个任务包含一组输入和输出通道。在Netty中,通道被永久分配给单个EventLoop。在(Nio)EventLoopGroup中,通道到EventLoop的映射以循环方式进行。我们希望对这种映射有更多的控制,并将同一任务的所有通道分配给相同的EventLoop。这种“Channel-EventLoop aff

  • 顶点似乎只由单个线程执行,并且总是由同一个线程执行。但是Vert. x能够通过每个CPU创建一个线程来使用机器中的所有CPU。每个线程可以向多个顶点发送消息。 但在性能测试期间,在标准verticle上评测Vertex http服务器时,我只能看到一个线程处理所有处理(vert.x-eventloop-thread-0)。 我该怎么做才能让我的8个事件循环线程都处理到verticle的消息?

  • 问题内容: 首先,我开始尝试了解什么是Node.Js。我有两个问题。 第一个问题 从文章费利克斯的,它说:“只能有一个回调在同一时间发射。在此之前,回调完成执行,所有其他的回调都在排队等候”。 然后,考虑以下代码(从nodejs官方网站复制) 如果同时收到两个客户端请求,则意味着以下工作流程: 收到第一个http请求事件,收到第二个请求事件。 收到第一个事件后,将立即执行第一个事件的回调函数。 同

  • 我正在使用vert。x 2.1.5版本。我试图在我的项目中使用事件循环。下面给出了示例代码 在此代码中,我的事件总线在执行事件循环之前返回值。我需要根据事件循环输出填充我的输出 如何实现

  • 本文向大家介绍Node.js事件循环(Event Loop)和线程池详解,包括了Node.js事件循环(Event Loop)和线程池详解的使用技巧和注意事项,需要的朋友参考一下 Node的“事件循环”(Event Loop)是它能够处理大并发、高吞吐量的核心。这是最神奇的地方,据此Node.js基本上可以理解成“单线程”,同时还允许在后台处理任意的操作。这篇文章将阐明事件循环是如何工作的,你也可

  • 我想了解Spring集成中如何处理消息:串行或并行。特别是我有一个带有轮询器和HTTP出站网关的入站通道适配器。我猜拆分器、变压器、标头丰富器等不会产生自己的线程。 我可能错过了,但是这些细节在留档的某个地方指定了吗? 还可以通过编程方式获取系统中的所有频道吗?