2012-05-23 53 views
1

我正在寫必須連接(永葆)的過程到幾(幾百個)遠程節點和管理的消息傳送/控制他們。Java客戶端的對multipeer使用了Netty

我做了這個軟件的兩個版本:先用經典的「線程每個連接」模式,第二個使用標準的Java NIO和選擇(減少線程分配,但有問題)。然後,環顧四周,我發現Netty在大多數情況下可以提升很多,我開始使用它。我的目標是保持資源使用率很低,保持較快。

一旦寫入流水線工廠自定義事件和動態處理程序切換,我停在最膚淺的一部分:它的分配。 我讀到的所有示例都使用單個客戶端進行單連接,因此我對此表示懷疑:我設置了ChannelFactoryPipelineFactory,因此每個(new ClientBootstrap(factory)).connect(address)都會生成一個具有新管道的新通道。是否有可能製作共享管道並將業務邏輯推遲到線程池? 如果是這樣,怎麼樣?

用標準的Java NIO我設法利用兩個小的小線程池(線程<遠程對等體)服用選擇器的優勢;然而,我在回收聽書頻道時遇到麻煩。

通信應通過它可以從遠端對等體接收定時的信息或使一個3路控制(命令ACK-OK)的單個信道發生。

另一方面:一旦事件達到最後的處理程序,會發生什麼?它在那裏我提取它,或者我可以從任何一點提取消息?

回答

1

您應該只有一個引導程序(即一個的ChannelFactory和一個PipeLineFactory)。管道甚至單個通道處理程序可以共享,但通常每個通道都會創建唯一的管道。

您可以在管道中擁有ExecutionHandler,以將執行從IO工作線程傳輸到線程池。

但是,您爲什麼不閱讀http://netty.io/wiki/的詳盡文檔?你會在那裏找到你所有問題的答案。