我现在使用Android作为我的Netty客户端。 Windows作为我的Netty Server。 最近,我在Netty上发现了一个奇怪的行为。 当我打开服务器端应用程序时,内存只有30MB。 但几个小时后,它上升到300M。与原始内存使用量相比,它的10倍。 我打开服务器的时间越长,它增加的内存就越多。
我不知道为什么会这样。这是正常的吗?
顺便说一下,由于Netty不支持内置服务器推送功能。 所以我使用静态方法将所有Channel存储在地图中:
public static final Map<Integer, Channel> mapConcurrentIdChannel = new ConcurrentHashMap<Integer, Channel>();
我将频道ID映射到频道。 例如:每当客户端A想要将消息推送到客户端B时,服务器将找到通道ID,从而获得Channel实例,然后使用Channel.write(object)方法。 这是在Netty中实现推送消息功能的正确方法吗? (如果没有,你能否建议一个很好的方法来实现Push功能?因为没有官方文档提到过) 另外,我担心这个实现会导致“内存泄漏问题”,我之前会解释。
关于使用ChannelGroup:
我的情况是,如果有5个人,A,B,C,D,E。有时,A想要向C发送消息,有时B想要向E发送消息。
我无法预测何时有人会向某人发送消息以及他们将发送给谁。所以我不能将所有5个人(连接)添加到ChannelGroup,写入该组将向每个人广播该消息。
我在谷歌搜索了很长时间,对我现在面临的问题没有任何帮助。 希望听到Netty经验丰富的开发人员提出的一些建议,你们!!
谢谢!
答案 0 :(得分:1)
我认为你想使用ChannelGroup [1]这基本上也只是使用ConcurrentMap put确保在关闭时删除Channel等。
[1] http://netty.io/3.6/api/org/jboss/netty/channel/group/DefaultChannelGroup.html