1 全局保存websocket的通道 NettyConfig.java
public class NettyConfig { public static ChannelGroup group = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);}
2 WebsocketHandler.java 接收处理响应 客户端发来的消息
/** * 接收处理响应客户端处理 * */public class WebsocketHandler extends SimpleChannelInboundHandler
3 初始化连接时候的各个组件
** * 初始化连接时候的各个组件 * */public class MyWebSocketChannelHandler extends ChannelInitializer { @Override protected void initChannel(SocketChannel e) throws Exception { e.pipeline().addLast("http-codec", new HttpServerCodec()); e.pipeline().addLast("aggregator", new HttpObjectAggregator(65536)); e.pipeline().addLast("http-chunked", new ChunkedWriteHandler()); e.pipeline().addLast("handler", new WebsocketHandler()); }}
4 启动服务
/** * 程序的入口,负责启动应用 * */public class Main { public static void main(String[] args) { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workGroup); b.channel(NioServerSocketChannel.class); b.childHandler(new MyWebSocketChannelHandler()); System.err.println("服务端开启等待客户端连接...."); Channel ch = b.bind(8888).sync().channel(); ch.closeFuture().sync(); } catch (Exception e) { e.printStackTrace(); }finally{ //优雅的退出程序 bossGroup.shutdownGracefully(); workGroup.shutdownGracefully(); } }}
5 客户端连接服务
6 也可以用java连接websocket服务
/** * java websocket客户端 * */public class WebSocketClientTest { public static WebSocketClient client; public static void main(String[] args) { try { client = new WebSocketClient(new URI("ws://192.168.3.167:8888/websocket"),new Draft_6455()) { @Override public void onOpen(ServerHandshake serverHandshake) { System.err.println("握手成功"); } @Override public void onMessage(String msg) { System.err.println("收到消息=========="+msg); if(msg.equals("over")){ client.close(); } } @Override public void onClose(int i, String s, boolean b) { System.err.println("链接已关闭"); } @Override public void onError(Exception e){ e.printStackTrace(); System.err.println("发生错误已关闭"); } }; } catch (URISyntaxException e) { e.printStackTrace(); } client.connect(); System.err.println(client.getDraft()); while(!client.getReadyState().equals(WebSocket.READYSTATE.OPEN)){ System.err.println("正在连接..."); } //连接成功,发送信息 client.send("哈喽,连接一下啊"); } }
7 netty 和websocketclient依赖
io.netty netty-all 5.0.0.Alpha1 org.java-websocket Java-WebSocket 1.3.5
8 感谢慕课网相关资源