首页 > 解决方案 > 简单的网络 CRUD WebFlux 应用程序:Netty 有什么用处?

问题描述

我从这里了解到:Jetty 和 Netty 有什么区别? Netty 根本不是服务器。但从这里:https ://stackoverflow.com/a/57297055/10894456我看到它是服务器。

无论如何,我想运行一个 Web 应用程序应该有一个服务器。那么 Netty 有没有帮助解决呢?或者无论如何需要某种服务器(Tomcat或Jetty或其他)?但是从这里开始:不要 spring-boot-starter-web 和 spring-boot-starter-webflux 一起工作吗?我了解到 Netty 与 Tomcat 不兼容...

请澄清一下,创建反应式 WebFlux crud 应用程序的最简单方法是什么?Netty 如何提供帮助?如果使用 Netty,服务器将是什么?Netty 如何与它兼容?

编辑: 好的,我看到 Netty 本身不是服务器,需要编写如下内容:

public class NettyServer {

    private int port;

    // constructor

    public static void main(String[] args) throws Exception {
 
        int port = args.length > 0
          ? Integer.parseInt(args[0]);
          : 8080;
 
        new NettyServer(port).run();
    }

    public void run() throws Exception {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup, workerGroup)
              .channel(NioServerSocketChannel.class)
              .childHandler(new ChannelInitializer<SocketChannel>() {
                @Override
                public void initChannel(SocketChannel ch) 
                  throws Exception {
                    ch.pipeline().addLast(new RequestDecoder(), 
                      new ResponseDataEncoder(), 
                      new ProcessingHandler());
                }
            }).option(ChannelOption.SO_BACKLOG, 128)
              .childOption(ChannelOption.SO_KEEPALIVE, true);

            ChannelFuture f = b.bind(port).sync();
            f.channel().closeFuture().sync();
        } finally {
            workerGroup.shutdownGracefully();
            bossGroup.shutdownGracefully();
        }
    }
}

但我也相信在创建简单的 WebFlux CRUD 服务时实际上没有人这样做。所以问题仍然存在:Netty 如何提供帮助?如果使用 Netty,服务器将是什么?Netty 如何与它兼容?

编辑 2:经过数小时的浏览,我意识到:Netty- 不是服务器,它只是一个使用 cahnnels/NIO2 的框架,但spring-boot-starter-reactor-netty提供了基于 Netty 框架的非阻塞和背压就绪的 TCP/HTTP/UDP 客户端和服务器。但可以使用spring-boot-starter-tomcat, spring-boot-starter-jetty, 或spring-boot-starter-undertow以这种方式代替:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <exclusions>
            <!-- Exclude the Netty dependency -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-reactor-netty</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- Use Jetty instead -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>

因此,只有 2 个概念相互混淆和混淆:Nettyspring-boot-starter-reactor-netty

标签: spring-bootspring-mvcjettynettyspring-webflux

解决方案


推荐阅读