1

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

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

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

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

通信应该通过单个通道进行,该通道可以接收来自远程对等方的定时消息或进行 3 路控制(command-ack-ok)。

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

4

1 回答 1

1

您应该只有一个引导程序(即一个 ChannelFactory 和一个 PipeLineFactory)。管道,甚至单独的通道处理程序,可以共享,但它们通常是为每个通道创建的。

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

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

于 2012-05-24T18:12:35.060 回答