Netty多人聊天室

在简单聊天室的代码中修改ChatServerHandler类,就可以模拟多人聊天的功能

1package com.cppdy.server; 2 3import io.netty.channel.Channel; 4import io.netty.channel.ChannelHandlerContext; 5import io.netty.channel.SimpleChannelInboundHandler; 6import io.netty.channel.group.ChannelGroup; 7import io.netty.channel.group.DefaultChannelGroup; 8import io.netty.util.concurrent.GlobalEventExecutor; 9 10public class ChatServerHandler extends SimpleChannelInboundHandler<String> { 11 12 // 存放channel的集合 13 public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); 14 15 @Override 16 protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception { 17 18 System.out.println(msg); 19 20 for (Channel channel : channels) { 21 if (!channel.equals(ctx.channel())) { 22 channel.writeAndFlush("[Server]-" + "[" + channel.remoteAddress() + "]" + msg); 23 } 24 } 25 26 } 27 28 @Override 29 public void handlerAdded(ChannelHandlerContext ctx) throws Exception { 30 System.out.println(ctx.channel().remoteAddress()+"--连接上了"); 31 channels.add(ctx.channel()); 32 } 33 34 @Override 35 public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { 36 System.out.println(ctx.channel().remoteAddress()+"--退出了"); 37 channels.remove(ctx.channel()); 38 } 39 40 @Override 41 public void channelActive(ChannelHandlerContext ctx) throws Exception { 42 System.out.println(ctx.channel().remoteAddress()+"--上线了"); 43 } 44 45 @Override 46 public void channelInactive(ChannelHandlerContext ctx) throws Exception { 47 System.out.println(ctx.channel().remoteAddress()+"--掉线了"); 48 } 49 50 @Override 51 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 52 System.out.println(ctx.channel().remoteAddress()+"--error"); 53 } 54 55}

先启动ChatServer类,再启动2次ChatClient类,就可以模拟两个客户端互发消息的功能。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )