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