gpt4 book ai didi

使用 Netty 的 Java 客户端点对多点

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:07 25 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

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

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

关于使用 Netty 的 Java 客户端点对多点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com