马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- package cn.rainwer.nettywebsocket.Server;
- import io.netty.bootstrap.ServerBootstrap;
- import io.netty.channel.ChannelFuture;
- import io.netty.channel.ChannelInitializer;
- import io.netty.channel.EventLoopGroup;
- 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.HttpServerExpectContinueHandler;
- public class NettyHttpServer {
- public static void main(String[] args) {
- EventLoopGroup bossGroup = new NioEventLoopGroup(1);
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- ChannelFuture f = null;
- try {
- //ServerBootstrap负责初始化netty服务器,并且开始监听端口的socket请求
- ServerBootstrap b = new ServerBootstrap();
- b.group(bossGroup, workerGroup)
- .channel(NioServerSocketChannel.class)
- .childHandler(new ChannelInitializer<SocketChannel>() {
- @Override
- protected void initChannel(SocketChannel socketChannel) throws Exception {
- // 为监听客户端read/write事件的Channel添加用户自定义的ChannelHandler
- socketChannel.pipeline()
- // .addLast("decoder", new HttpRequestDecoder())
- // .addLast("encoder", new HttpResponseEncoder())
- .addLast(new HttpServerCodec())
- .addLast(new HttpServerExpectContinueHandler())
- .addLast("aggregator", new HttpObjectAggregator(512 * 1024))
- .addLast(new NettyWebSocketConnectHandler2());
- }
- });
- f = b.bind(9996).sync();
- System.out.println("======NettyServer启动成功!!!=========");
- // f.channel().closeFuture().sync();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (f != null && f.isSuccess()) {
- System.out.println("Netty server listening on port " + " and ready for connections...");
- } else {
- System.out.println("Netty server start up Error!");
- }
- }
- }
- }
复制代码- package cn.rainwer.nettywebsocket.Server;
- import io.netty.buffer.Unpooled;
- import io.netty.channel.ChannelHandler;
- import io.netty.channel.ChannelHandlerContext;
- import io.netty.channel.SimpleChannelInboundHandler;
- import io.netty.handler.codec.http.*;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Component;
- import java.net.InetAddress;
- import java.nio.charset.StandardCharsets;
- @Slf4j
- @ChannelHandler.Sharable
- @Component
- public class NettyWebSocketConnectHandler2 extends SimpleChannelInboundHandler<Object> {
- @Override
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object msg) throws Exception {
- if (msg instanceof FullHttpRequest) {
- log.info("准备提取token");
- //转化为http请求
- FullHttpRequest request = (FullHttpRequest) msg;
- //拿到请求地址
- String uri = request.uri();
- System.out.println(uri);
- //判断是不是websocket请求,如果是拿出我们传递的参数(我的是token)
- channelHandlerContext.channel().writeAndFlush("Welcome to " + InetAddress.getLocalHost().getHostName() + " service!\n");
- FullHttpResponse fullHttpResponse = new DefaultFullHttpResponse(request.protocolVersion(), HttpResponseStatus.OK, Unpooled.wrappedBuffer(uri.getBytes(StandardCharsets.UTF_8)));
- fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
- .set(HttpHeaderNames.CONTENT_LENGTH, fullHttpResponse.content().readableBytes());
- channelHandlerContext.writeAndFlush(fullHttpResponse);
- } else {
- }
- }
- }
复制代码
|