spring-boot - 简单的网络 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 个概念相互混淆和混淆:Netty
和spring-boot-starter-reactor-netty
解决方案
推荐阅读
- c# - 如何修复错误弹出“类未注册”
- apache-zeppelin - Apache Zeppelin 错误本地 jar 不存在
- firebase - 验证对指定经过身份验证的用户的读取访问权限
- java - Maven Build缺少主类
- python - Python:方法 .as_matrix 将在未来版本中删除。改用 .values
- python - 获取包含单个元素的索引错误
- laravel - Laravel 5.6 存储 API 的会话令牌服务器端
- python - 替换字符组合
- javascript - 改变一个组件中的值会影响另一个组件
- vue.js - VueJS:如何滚动 v-list-title