netty channel and thread and eventLoop



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

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

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

所以你问了多个问题,我会尽量回答所有这些......

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

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

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

最新更新