使用Netty的Java客户端对等到多路径

时间:2012-05-23 14:45:44

标签: java multithreading netty

我正在编写一个进程,该进程必须连接(并保持活动)几个(数百个)远程对等端,并管理对它们的消息传递/控制。

我制作了这个软件的两个版本:第一个使用经典的“每个连接线程”模型,第二个使用标准的Java NIO和选择器(减少线程分配,但有问题)。然后,环顾四周,我发现在大多数情况下,Netty可以提升很多,我开始使用它进行第三次。我的目标是保持资源使用率很低,保持快速。

一旦用自定义事件和动态处理程序切换编写了管道工厂,我就停止了最肤浅的部分:它的分配。 我读过的所有示例都使用单个客户端进行单一连接,因此我怀疑:我设置了ChannelFactoryPipelineFactory,因此每个(new ClientBootstrap(factory)).connect(address)都会创建一个新频道用新的管道。是否可以创建共享管道并将业务逻辑推迟到线程池? 如果是这样,怎么样?

使用标准的Java NIO我设法使用了两个利用选择器的小型小线程池(线程<远程对等体);然而,我在回收听取的写作频道方面遇到了麻烦。

通信应通过单个通道进行,该通道可以从远程对等方接收定时消息或进行3向控制(命令-ack-ok)。

另一方面:一旦事件到达最后一个处理程序,会发生什么?是我在那里提取它还是可以从任何一点提取消息?

1 个答案:

答案 0 :(得分:1)

你应该只有一个bootstrap(即一个ChannelFactory和一个PipeLineFactory)。管道甚至单个通道处理程序可以共享,但通常每个通道创建它们。

您可以在管道中安装ExecutionHandler,以将执行从IO工作线程转移到线程池。

但为什么不在http://netty.io/wiki/阅读详尽的文件?你会找到你那里的每一个问题的答案。