netty通道、线程和事件循环

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

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

入站通道和出站通道都不受限制。 有时不同的请求共享相同的入站通道, 有时不。
当教程谈到使用netty作为代理时,他们总是说可以使用server server bootstrap中使用的相同eventloop来创建客户端引导以避免线程过载。这是什么意思?当客户端和服务器共享同一个eventloop时,它们本质上共享什么?我对此感兴趣是因为当客户端以异步方式运行时,我不知道如何将响应消息返回到其原始通道

所以你问了很多问题,我将尝试回答所有这些问题

1入站和出站通道的限制需要由您自己实施,或者您依赖于您使用的操作系统设置的限制,该限制通常是每个进程可以打开的文件描述符数量的大部分倍

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

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