【问题标题】:Java client peer-to-multipeer using Netty使用 Netty 的 Java 客户端点对多点
【发布时间】:2012-05-30 03:27:44
【问题描述】:

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

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

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

使用标准的 java NIO,我设法利用了选择器的优势,使用了两个小型线程池(线程

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

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

【问题讨论】:

    标签: java multithreading netty


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2015-07-04
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多