2013-05-27 24 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