android netty file,Android Netty即时通讯的问题?

博客讨论了使用Netty实现Android设备间消息传递的问题。当前方案是通过全局ChannelGroup保存所有连接,但在大量设备(如1000台)在线时,遍历发送消息可能导致效率低下。作者寻求更优的解决方案,以避免遍历大型集合时的性能瓶颈。
摘要由CSDN通过智能技术生成

现在根据网上Netty框架Demo实现了 客户端和服务器端的通讯, 客户端发消息服务端能收到,服务器发客户端也能收到, 现在的问题是, 有两个Android手机(A,B)。 A手机向B手机发消息,通过服务器做转发, 服务器怎么区分呢? 网上说把Channel保存的一个全局的集合中,那么然后遍历这个集合判断给指定的目标发送消息即可,这么做也行,但问题是,加入有1000台设备登录上来了,那么集合就保存1000条Channel 到时候for循环遍历这个集合 会很慢把 我觉得不合适 ,有哪位大神做过类似的需求!!! 求解答。

以下这些代码是我服务端的接受客户端连接以及发来消息的逻辑···

//用来保存Channel

public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

//把保持连接的Channel保存的集合中

@Override

public void handlerAdded(ChannelHandlerContext ctx) throws Exception { // (2)

Channel incoming = ctx.channel();

for (Channel channel : channels) {

channel.writeAndFlush("[SERVER] - " + incoming.remoteAddress() + " 加入\n");

}

channels.add(ctx.channel());

}

@Override

protected void channelRead0(ChannelHandlerContext ctx, String message) throws Exception {

System.out.println("收到客户端的消息:"+message);

MessageBean bean=gson.fromJson(message, MessageBean.class);

Channel incoming = ctx.channel();//进来的人(Channel)

System.out.println("进入服务端的Channel"+incoming.remoteAddress());

for (Channel channel : channels) {

if (channel != incoming){ //如果保存的Channel 和进来的不是同一个 那就发送给别人,否则发送给自己

channel.writeAndFlush("[别人:" + incoming.remoteAddress() + "]" + message + "\n");

} else {

channel.writeAndFlush("[你]" + message + "\n");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值