我正在寫必須連接(永葆)的過程到幾(幾百個)遠程節點和管理的消息傳送/控制他們。Java客戶端的對multipeer使用了Netty
我做了這個軟件的兩個版本:先用經典的「線程每個連接」模式,第二個使用標準的Java NIO和選擇(減少線程分配,但有問題)。然後,環顧四周,我發現Netty在大多數情況下可以提升很多,我開始使用它。我的目標是保持資源使用率很低,保持較快。
一旦寫入流水線工廠自定義事件和動態處理程序切換,我停在最膚淺的一部分:它的分配。 我讀到的所有示例都使用單個客戶端進行單連接,因此我對此表示懷疑:我設置了ChannelFactory
和PipelineFactory
,因此每個(new ClientBootstrap(factory)).connect(address)
都會生成一個具有新管道的新通道。是否有可能製作共享管道並將業務邏輯推遲到線程池? 如果是這樣,怎麼樣?
用標準的Java NIO我設法利用兩個小的小線程池(線程<遠程對等體)服用選擇器的優勢;然而,我在回收聽書頻道時遇到麻煩。
通信應通過它可以從遠端對等體接收定時的信息或使一個3路控制(命令ACK-OK)的單個信道發生。
另一方面:一旦事件達到最後的處理程序,會發生什麼?它在那裏我提取它,或者我可以從任何一點提取消息?