New file |
| | |
| | | package com.example.erp.tools.netty; |
| | | |
| | | import io.netty.channel.ChannelHandlerContext; |
| | | import io.netty.channel.SimpleChannelInboundHandler; |
| | | import io.netty.handler.codec.http.FullHttpRequest; |
| | | import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class MyWebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> { |
| | | |
| | | @Override |
| | | public void channelActive(ChannelHandlerContext ctx) throws Exception { |
| | | System.out.println("与客户端建立连接,通道开启!"); |
| | | |
| | | //添加到channelGroup通道组 |
| | | MyChannelHandlerPool.channelGroup.add(ctx.channel()); |
| | | } |
| | | |
| | | @Override |
| | | public void channelInactive(ChannelHandlerContext ctx) throws Exception { |
| | | System.out.println("与客户端断开连接,通道关闭!"); |
| | | //添加到channelGroup 通道组 |
| | | MyChannelHandlerPool.channelGroup.remove(ctx.channel()); |
| | | } |
| | | |
| | | @Override |
| | | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { |
| | | //首次连接是FullHttpRequest,处理参数 by zhengkai.blog.csdn.net |
| | | if (null != msg && msg instanceof FullHttpRequest) { |
| | | FullHttpRequest request = (FullHttpRequest) msg; |
| | | String uri = request.uri(); |
| | | |
| | | Map paramMap=getUrlParams(uri); |
| | | System.out.println("接收到的参数是:"+paramMap); |
| | | //如果url包含参数,需要处理 |
| | | if(uri.contains("?")){ |
| | | String newUri=uri.substring(0,uri.indexOf("?")); |
| | | System.out.println(newUri); |
| | | request.setUri(newUri); |
| | | } |
| | | |
| | | }else if(msg instanceof TextWebSocketFrame){ |
| | | //正常的TEXT消息类型 |
| | | TextWebSocketFrame frame=(TextWebSocketFrame)msg; |
| | | System.out.println("客户端收到服务器数据:" +frame.text()); |
| | | sendAllMessage(frame.text()); |
| | | } |
| | | super.channelRead(ctx, msg); |
| | | } |
| | | |
| | | @Override |
| | | protected void channelRead0(ChannelHandlerContext channelHandlerContext, TextWebSocketFrame textWebSocketFrame) throws Exception { |
| | | |
| | | } |
| | | |
| | | public void sendAllMessage(String message){ |
| | | //收到信息后,群发给所有channel |
| | | MyChannelHandlerPool.channelGroup.writeAndFlush( new TextWebSocketFrame(message)); |
| | | } |
| | | |
| | | private static Map getUrlParams(String url){ |
| | | Map<String,String> map = new HashMap<>(); |
| | | url = url.replace("?",";"); |
| | | if (!url.contains(";")){ |
| | | return map; |
| | | } |
| | | if (url.split(";").length > 0){ |
| | | String[] arr = url.split(";")[1].split("&"); |
| | | for (String s : arr){ |
| | | String key = s.split("=")[0]; |
| | | String value = s.split("=")[1]; |
| | | map.put(key,value); |
| | | } |
| | | return map; |
| | | |
| | | }else{ |
| | | return map; |
| | | } |
| | | } |
| | | } |
| | | |