2014-05-24 96 views
1

我正在爲多人遊戲寫一個Netty服務器,我不確定是否需要以某種方式同步一個生活在服務器中但由ChannelHandler訪問的變量。從Netty Handler中訪問Netty服務器的一個實例

在服務器級別,我使用ArrayList來存儲服務器將要服務的不同匹配項。

每場比賽將引用2個頻道(我爲每場比賽存儲ChannelHandlerContetx)。

當我創建從SimpleChannelInboundHandler擴展的ChannelHandler時,我將服務器實例傳遞給構造函數,並將該服務器作爲實例變量存儲在處理函數中。

當channelActive被觸發時,ChannerlHandler將以「等待」狀態在ArrayList(位於服務器實例中)中搜索匹配項。如果它找到一個它會綁定它並更改匹配狀態。如果沒有創建新的Match,然後通道綁定到它,使其處於等待狀態。

我知道渠道是線程安全的。但是這裏不同的頻道訪問同一個服務器的ArrayList實例。

在這種情況下,我應該照顧同步對ArrayList的訪問嗎?

請注意萬一它增加了我的問題:因爲我將在後端有一個數據庫,我正在創建處理程序時傳遞一個DefaultEventExecutor在.addLast()方法。

回答

0

如果您有多個eventLoop,那麼您將在多個eventLoops中併發訪問靜態ArrayList。因此,您應該注意同步對ArrayList的訪問。