Android Netty即时通讯的问题?

发布于 2022-09-04 22:57:47 字数 1464 浏览 27 评论 0

现在根据网上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");
        }
    }   
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文