Netty多人聊天室
阿新 • • 發佈:2018-11-30
在簡單聊天室的程式碼中修改ChatServerHandler類,就可以模擬多人聊天的功能
package com.cppdy.server; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.group.ChannelGroup; import io.netty.channel.group.DefaultChannelGroup;import io.netty.util.concurrent.GlobalEventExecutor; public class ChatServerHandler extends SimpleChannelInboundHandler<String> { // 存放channel的集合 public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) throwsException { System.out.println(msg); for (Channel channel : channels) { if (!channel.equals(ctx.channel())) { channel.writeAndFlush("[Server]-" + "[" + channel.remoteAddress() + "]" + msg); } } } @Override public void handlerAdded(ChannelHandlerContext ctx) throwsException { System.out.println(ctx.channel().remoteAddress()+"--連線上了"); channels.add(ctx.channel()); } @Override public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { System.out.println(ctx.channel().remoteAddress()+"--退出了"); channels.remove(ctx.channel()); } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System.out.println(ctx.channel().remoteAddress()+"--上線了"); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { System.out.println(ctx.channel().remoteAddress()+"--掉線了"); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.println(ctx.channel().remoteAddress()+"--error"); } }
先啟動ChatServer類,再啟動2次ChatClient類,就可以模擬兩個客戶端互發訊息的功能。