netty channel和thread以及eventLoop

时间:2018-06-01 06:19:24

标签: netty

当netty服务器和netty客户端连接成代理时,请阐明:请求,线程,事件循环,服务器通道和客户端通道之间的关系。在我开始之前,我想为每个请求,netty服务器将从eventloop获取一个工作线程,还有一个channel(绑定到工作线程,来自线程池的有限对象ID)来处理此入站邮件,并将其发送到来自netty客户端的出站channel。此后,可能的服务器channel是有限的,而客户端channel是无限的(因为出站端口是随机选择的)。但是,我的观察是:

  1. 入站通道和出站通道均不受限制。
  2. 有时不同的请求共享相同的入站通道, 有时候不要。
  3. 当教程讨论使用netty作为代理时,他们总是说服务器(Serverbootstrap)中使用的相同eventloop可用于创建客户端(bootstrap)以节省线程重载。这是什么意思?当客户端和服务器共享同一个事件循环时,它们分享的内容是什么?我感兴趣的是因为当客户端以异步方式运行时,我不知道如何将响应消息返回到其原始通道。

1 个答案:

答案 0 :(得分:0)

所以你问过多个问题,我会尝试回答所有这些......

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

2)Channel表示连接,因此根据所使用的协议,多个请求/响应可以共享相同的连接。例如,HTTP keep-alive是HTTP / 1.1的默认值

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