1. 程式人生 > >Netty多人聊天室

Netty多人聊天室

在簡單聊天室的程式碼中修改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) throws
Exception { 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) throws
Exception { 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類,就可以模擬兩個客戶端互發訊息的功能。