美文网首页
netty 起 WebSocket server

netty 起 WebSocket server

作者: lesliefang | 来源:发表于2019-08-22 19:22 被阅读0次
    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.channel.*;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.SocketChannel;
    import io.netty.channel.socket.nio.NioServerSocketChannel;
    import io.netty.handler.codec.http.HttpObjectAggregator;
    import io.netty.handler.codec.http.HttpServerCodec;
    import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
    import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
    import io.netty.util.concurrent.GlobalEventExecutor;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class WebSocketServer {
        private final static Logger logger = LoggerFactory.getLogger(WebSocketServer.class);
        private final int port = 5520;
    
        private final EventLoopGroup bossGroup = new NioEventLoopGroup();
        private final EventLoopGroup workerGroup = new NioEventLoopGroup();
    
        public void start() {
            ServerBootstrap bootstrap = new ServerBootstrap()
                    .group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline().addLast(new HttpServerCodec());
                            ch.pipeline().addLast(new HttpObjectAggregator(65536));
                            ch.pipeline().addLast(new WebSocketServerProtocolHandler("/websocket"));
                            ch.pipeline().addLast(new WebSocketHandler());
                        }
                    });
            try {
                ChannelFuture bindFuture = bootstrap.bind(port).sync();
                logger.info("websocket server is started on port {}", port);
                bindFuture.channel().closeFuture().sync();
            } catch (Exception e) {
                logger.error("websocket server starts failed!", e);
            } finally {
                bossGroup.shutdownGracefully();
                workerGroup.shutdownGracefully();
            }
        }
    
        class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
    
            @Override
            protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {
                System.out.println(msg.text());
    
                ctx.channel().writeAndFlush(new TextWebSocketFrame("nihao meimei"));
            }
        }
    
        public static void main(String[] args) {
            new WebSocketServer().start();
        }
    }
    

    相关文章

      网友评论

          本文标题:netty 起 WebSocket server

          本文链接:https://www.haomeiwen.com/subject/joposctx.html