【发布时间】: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