还是和上几篇一样,先给出前面笔记的连接,有没看的可以去看看再来!
netty01 、 netty02 、netty03
看到这里、你基本上可以使用netty接受信息和根据对应的信息返回信息了
接下来我们在web项目中使用,通过访问去启动,通过请求去给指定的客户端发信息,所以说到这篇就是重点了,我们不讲底层,不讲理论,直接上代码!
因为自己就是从零开始的,一上来你就给我讲一大堆理论、底层、我就mmp哦!了解底层我个人觉得你总是得会基本的使用了然后再开始去理解底层吧,不然那么枯燥无味的事情,谁会喜欢?
那我们就接着上一篇的来哈!
package com.netty.nettys01; import com.service.NettyTest01; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelId; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.group.ChannelGroup; import io.netty.channel.group.DefaultChannelGroup; import io.netty.util.concurrent.GlobalEventExecutor; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import static org.apache.http.Consts.UTF_8; public class DiscardServerHandler extends ChannelInboundHandlerAdapter { /** * 在这里使用DefaultChannelGroup将每次连接的 Channel 存起来,每一个Channel 底层就是一个连接 */ private static final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); private static final Map map = new HashMap<String,ChannelId>(); @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { /** * 这里就是添加了 */ channels.add(ctx.channel()); /** * 获取每一个连接的唯一标示吧,相当于 */ ChannelId Id= ctx.channel().id(); /** * map就不用解释了吧,这里就用 1 代替了key;正常项目的话肯定使用用户的唯一标示了 */ map.put("1",Id); /** * 这里只是写了个测试遍历了一下 */ Iterator<Channel> ls= channels.iterator(); while (ls.hasNext()){ Channel l= ls.next(); System.out.println(l.id().toString()); } } /** * 下面这两个get方法是个人使用方法,不好的还希望大家给点意见 * @return */ public static ChannelGroup getChannels() { return channels; } public static Map getMap() { return map; } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf in=(ByteBuf)msg; System.out.println(ctx.channel().id().toString()+"收到信息:"+in.toString(UTF_8)); String reMsg="66666"; ByteBuf in2= Unpooled.copiedBuffer(reMsg.getBytes()); ctx.writeAndFlush(in2); new NettyTest01().test(null,null); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); } }