2013-05-27 62 views
1

我現在使用Android作爲我的Netty客戶端。和Windows一樣我的Netty服務器。最近,我在Netty上發現了一個奇怪的行爲。 當我打開服務器端應用程序時,內存只有30MB。 但幾個小時後,它上升到300M。它的原始內存使用量是其10倍。 我打開服務器的時間越長,它會增加的內存越多。Netty服務器推送使用和內存泄漏

我不知道爲什麼會發生這種情況。這是正常的嗎?

順便說一句,因爲Netty不支持內置的服務器推送功能。 因此,我使用靜態方法的所有頻道的存儲在圖:

public static final Map<Integer, Channel> mapConcurrentIdChannel = new ConcurrentHashMap<Integer, Channel>(); 

我映射信道ID頻道。例如:當客戶端A想要將消息推送到客戶端B時,服務器將查找通道ID,從而獲得通道實例,然後使用Channel.write(object)方法。 這是在Netty中實現Push Message功能的正確方法嗎? (如果不是的話,你能否提供一個實現Push功能的好方法?因爲沒有官方文檔提及) 另外,恐怕這個實現會導致我之前解釋的「內存泄漏問題」。

關於使用通道組:
我的情況是,如果有5人,A,B,C,d,E有時,希望將消息發送到C,有時B想要發送消息到E 我無法預測什麼時候有人會將消息發送給某人以及他們將發送給誰。所以我不能將所有5個人(連接)都添加到ChannelGroup中,寫給該組的人會將消息廣播給每個人。

我在Google上搜索了很長時間,對我現在面臨的問題沒有任何幫助。 希望聽到來自Netty經驗豐富的開發人員的一些建議,你!

謝謝!

+0

你有沒有發現被關閉被刪除這個解決方案?會很好,如果你分享 – jbakirov

回答

1

我想你想使用通道組[1]這裏面基本上還只是使用的ConcurrentMap把確保通道時等

[1] http://netty.io/3.6/api/org/jboss/netty/channel/group/DefaultChannelGroup.html

+0

感謝您的回覆。我的情景是,如果有5個人,A,B,C,D,E。有時,A想要發送消息給C,有時B想要向E發送消息。我無法預測何時有人會發送消息給有人和他們將發送什麼。所以我不能將所有5個人(連接)都添加到ChannelGroup中,寫給該組的人會將消息廣播給每個人。除了解決這類問題還有別的辦法嗎? – Cheng

+0

我應該創建一個保存所有連接的主要通道組:每當客戶端A想要連接到客戶端C時,在主要通道組中搜索A和C,然後將A和C添加到新的ChannelGroup中?順便說一句,檢查代碼後,我認爲內存問題可能來自另一個與Netty無關的組件。 – Cheng