2013-02-14 83 views
5

我一直在代理服務器例如,從Netty website兮兮:Netty處理程序對每個連接都是唯一的嗎?

的示例源代碼處理程序有一個volatile變量

private volatile Channel outboundChannel; 

這需要連接到另一臺服務器的代理渠道的照顧。

這讓我想知道這是否是實現多代理連接的正確和安全的方法。

我想允許多個連接(入站)連接到不同的出站,同時確保每個入站連接唯一鏈接到出站通道。根據我的知識,Netty爲每個連接生成一個新的流水線。這是否意味着由管道工廠新生成的處理程序專門用於新連接(通道)?

p.s.如果我有1,000個活動連接到我的Netty服務器,這是否意味着有1000個不同的管道?

回答

8

每個連接都創建一個管道,但管道可能包含共享和獨佔處理程序。一些處理程序不保持狀態,並且可以將一個實例插入到多個[全部]管道中。 Netty提供的可以共享的處理程序註釋爲ChannelHandler.Sharable。請參閱tutorial中標題爲Shared and Exclusive Channel Handlers的部分。

+1

對,但是如果我爲每個連接(即每個管道)聲明一個獨佔通道處理程序,是否意味着通道處理程序僅專用於該特定連接? – wns349 2013-02-14 10:30:24

+1

正確。通過保持附件或ChannelLocals中的所有狀態,可以將給定的處理程序重新實現爲可共享。 – Nicholas 2013-02-14 11:49:33

+0

我關心資源收集問題。 如何在使用後釋放處理程序資源? – 2016-10-31 03:00:59

相關問題