netty 通道和线程以及 eventLoop
netty channel and thread and eventLoop
请说明:request、thread、eventloop、server channel和client channel之间的关系,当netty server和netty client连接做代理的时候。在开始之前,我想对于每个请求,netty server 都会从 eventloop
获取一个 worker thread,并且还会获取一个 channel
(绑定到 worker thread,从线程池中获取有限的 object ids)来处理此入站消息,并将其发送到来自 netty 客户端的出站 channel
。此后,可能的服务器channel
是有限的,而客户端channel
是无限的(因为出站端口是随机选择的)。但是,我的观察是:
- 入站通道和出站通道均不受限制。
- 有时不同的请求共享相同的入站通道,
有时不需要。
当教程谈论使用 netty 作为代理时,他们总是说在服务器 (Serverbootstrap
) 中使用的相同事件循环可用于创建客户端 (bootstrap
) 以节省线程过载。这是什么意思?当客户端和服务器共享同一个事件循环时,它们本质上共享什么?我对此很感兴趣,因为当客户端以异步方式 运行 时,我不知道如何 return 向其原始通道发送响应消息。
所以你问了很多问题,我会尽力回答所有这些...
1) 入站和出站通道的限制需要由您自己实施,或者您依赖于您使用的 OS 设置的限制(大多数时候每个进程可以打开的文件描述符的数量。
2) 一个 Channel 代表一个连接,因此根据使用的协议,多个请求/响应可能共享同一个连接。例如,这可以通过 HTTP keep-alive 实现,这是 HTTP/1.1
的默认设置
为服务器和客户端共享相同的 EventLoop 允许使用相同的线程处理两者,这意味着您可以在两者之间传输数据而无需上下文切换。如果您构建代理之类的东西,这一点尤其重要。
请说明:request、thread、eventloop、server channel和client channel之间的关系,当netty server和netty client连接做代理的时候。在开始之前,我想对于每个请求,netty server 都会从 eventloop
获取一个 worker thread,并且还会获取一个 channel
(绑定到 worker thread,从线程池中获取有限的 object ids)来处理此入站消息,并将其发送到来自 netty 客户端的出站 channel
。此后,可能的服务器channel
是有限的,而客户端channel
是无限的(因为出站端口是随机选择的)。但是,我的观察是:
- 入站通道和出站通道均不受限制。
- 有时不同的请求共享相同的入站通道, 有时不需要。
当教程谈论使用 netty 作为代理时,他们总是说在服务器 (Serverbootstrap
) 中使用的相同事件循环可用于创建客户端 (bootstrap
) 以节省线程过载。这是什么意思?当客户端和服务器共享同一个事件循环时,它们本质上共享什么?我对此很感兴趣,因为当客户端以异步方式 运行 时,我不知道如何 return 向其原始通道发送响应消息。
所以你问了很多问题,我会尽力回答所有这些...
1) 入站和出站通道的限制需要由您自己实施,或者您依赖于您使用的 OS 设置的限制(大多数时候每个进程可以打开的文件描述符的数量。
2) 一个 Channel 代表一个连接,因此根据使用的协议,多个请求/响应可能共享同一个连接。例如,这可以通过 HTTP keep-alive 实现,这是 HTTP/1.1
的默认设置为服务器和客户端共享相同的 EventLoop 允许使用相同的线程处理两者,这意味着您可以在两者之间传输数据而无需上下文切换。如果您构建代理之类的东西,这一点尤其重要。