Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory leaks Netty服务器推送使用率和内存泄漏_Memory Leaks_Push Notification_Push_Netty_Nio - Fatal编程技术网

Memory leaks Netty服务器推送使用率和内存泄漏

Memory leaks Netty服务器推送使用率和内存泄漏,memory-leaks,push-notification,push,netty,nio,Memory Leaks,Push Notification,Push,Netty,Nio,我现在使用Android作为我的Netty客户端。和Windows作为我的Netty服务器。 最近,我在Netty上发现了一个奇怪的行为。 当我打开服务器端应用程序时,内存只有30MB。 但几个小时后,它上升到300米。它是原始内存使用量的10倍。 我打开服务器的时间越长,它增加的内存就越多 我不知道为什么会这样。这正常吗 顺便说一下,因为Netty不支持内置的服务器推送功能。 因此,我使用静态方法将所有通道存储在地图中: public static final Map<Integer,

我现在使用Android作为我的Netty客户端。和Windows作为我的Netty服务器。 最近,我在Netty上发现了一个奇怪的行为。 当我打开服务器端应用程序时,内存只有30MB。 但几个小时后,它上升到300米。它是原始内存使用量的10倍。 我打开服务器的时间越长,它增加的内存就越多

我不知道为什么会这样。这正常吗

顺便说一下,因为Netty不支持内置的服务器推送功能。 因此,我使用静态方法将所有通道存储在地图中:

public static final Map<Integer, Channel> mapConcurrentIdChannel = new ConcurrentHashMap<Integer, Channel>();
publicstaticfinal-Map-concurrentidchannel=newconcurrenthashmap();
我将通道ID映射到通道。 例如:每当客户机A想要将消息推送到客户机B时,服务器就会找到通道id,从而获得通道实例,然后使用channel.write(object)方法。 这是在Netty中实现推送消息功能的正确方法吗? (如果没有,你能建议一个实现推送功能的好方法吗?因为没有官方文档提到这一点) 另外,我担心这个实现会导致“内存泄漏问题”,我在前面已经解释过了

关于使用ChannelGroup:
我的场景是,如果有5个人,A,B,C,D,E。有时候,A想给C发消息,有时候B想给E发消息。 我无法预测某人何时会向某人发送消息,以及他们将向谁发送消息。所以我无法将所有5个人(连接)添加到ChannelGroup,向该群组写信会将消息广播给每个人

我在谷歌上搜索了很长时间,对于我现在面临的问题没有任何帮助。 希望听到一些来自经验丰富的开发人员的建议,谢谢


谢谢

我认为您需要使用ChannelGroup[1]来实现这一点,基本上也就是说,只需使用ConcurrentMap put,确保在关闭通道时将其删除,等等


[1]

我认为您需要使用ChannelGroup[1]来实现这一点,基本上也就是说,只需使用ConcurrentMap put,确保频道关闭时被删除,等等


[1]

谢谢您的回复。我的设想是,如果有5个人,A,B,C,D,E。有时,A想给C发消息,有时B想给E发消息。我无法预测某人何时会给某人发消息,他们会给谁发消息。所以我无法将所有5个人(连接)添加到ChannelGroup,向该群组写信会将消息广播给每个人。除了解决这类问题,还有其他选择吗?我是否应该创建一个主通道组来保存所有连接。每当客户端A想要连接到客户端C时,在主通道组中搜索A和C,然后将A和C添加到新的通道组?顺便说一句,在检查代码后,我认为内存问题可能来自与Netty无关的另一个组件。谢谢您的回复。我的设想是,如果有5个人,A,B,C,D,E。有时,A想给C发消息,有时B想给E发消息。我无法预测某人何时会给某人发消息,他们会给谁发消息。所以我无法将所有5个人(连接)添加到ChannelGroup,向该群组写信会将消息广播给每个人。除了解决这类问题,还有其他选择吗?我是否应该创建一个主通道组来保存所有连接。每当客户端A想要连接到客户端C时,在主通道组中搜索A和C,然后将A和C添加到新的通道组?顺便说一句,在检查代码后,我认为内存问题可能来自与Netty无关的另一个组件。您找到解决方案了吗?如果你能分享,那就太好了。你找到解决办法了吗?如果你能分享,那就太好了