使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。
Netty是一个无阻塞的输入/输出(NIO)框架,它使开发低级网络服务器和客户端变得相对简单。 Netty为需要在套接字级别上工作的开发人员提供了令人难以置信的强大功能,例如,在开发客户端和服务器之间的自定义通信协议时。 它支持SSL / TLS,具有阻塞和非阻塞统一API,以及灵活的线程模型。 它又快又高效。
Netty的异步,非阻塞I / O模型是为高度可扩展的体系结构设计的,与类似的阻塞模型相比,它可能允许更高的吞吐量。 基本上,非阻塞服务器在单个线程上异步运行所有请求(没有函数应“阻塞”事件循环)。 这与阻塞服务器模型形成对比,后者通常在单独的线程上运行每个请求。 通过不必在负载增加时切换线程或创建新线程,非阻塞模型可以减少开销,并随着流量增加而更快地进行扩展。
但是,所有这些功能都是以复杂性为代价的。 非阻塞代码通常更难阅读,测试和维护,尽管随着异步范例的成熟,非阻塞代码已大大改善。 由于Netty是在套接字级别工作的,因此还需要更深入地了解诸如线程循环,字节缓冲区和内存管理之类的细节。
Netty.io团队做了出色的工作,使Netty的所有功能易于使用,但是它仍然比高级库(例如Spring Boot WebFlux)更加复杂。 那么为什么要使用它呢?
Netty旨在使自定义网络协议的实现相对容易。 HTTP很不错,但是它是一种通用协议,基本上适合大多数情况。 但是,如果您始终在服务器和客户端之间来回传递自定义的结构化数据(大型文件,流媒体,实时游戏数据等),则可以做得更好。 Netty允许您编写适合自己特定需求的网络协议,针对特定情况优化流量,而不会产生HTTP或FTP之类的不必要开销。
但是,即使您不打算编写自己的自定义TCP协议,也可以使用Netty的功能。 Spring WebFlux是Spring对非阻塞和反应式编程的解答。 它是传统(阻塞)Spring MVC体系结构的替代方案。 默认情况下,Spring Boot WebFlux Starter在嵌入式Netty服务器上运行。 在这种配置中,您可以将WebFlux视为基于Netty的NIO套接字优势构建的反应性,非阻塞HTTP应用程序层。
在本教程中,您将在Netty中创建一个基本的“ Hello world”应用程序。 接下来,您将在Spring Boot WebFlux中创建相同的“ Hello world”应用程序。 最后,您将使用Okta作为OAuth 2.0提供程序将OAuth 2.0登录名添加到应用程序中。
安装项目依赖项
在开始之前,该项目需要安装一些必需的工具。
Java 11 :该项目使用Java11 。您可以按照OpenJDK网站上的说明或使用SDKMAN来安装OpenJDK。
HTTPie :这是一个简单的命令行实用程序,用于发出将用于测试REST应用程序的HTTP请求。 Okta开发人员也喜欢它。 按照其网站上的说明进行安装 。
Okta开发人员帐户 :您将Okta用作OAuth / OIDC提供程序,以向应用程序添加OAuth2登录身份验证。 如果尚未注册免费的Okta开发者帐户 ,请注册。
您还应该继续克隆该博客的GitHub存储库 。
<
git clone https://github.com/oktadeveloper/okta-netty-webflux-example.git
该项目包含三个子目录,分别对应于本教程的三个部分:
-
netty-hello-world
:如何创建Netty服务器的非常基本的示例 -
webflux-hello-world
:如何在Spring WebFlux中创建相同的服务器 -
webflux-oauth2login
:如何将OAuth2登录添加到Spring WebFlux应用程序的示例
使用Netty构建HTTP服务器
HTTP服务器是HTTP协议(OSI第7层)的应用程序层实现,因此在Internet堆栈中相对较高。 如果您正在开发REST API, 那么您将在为您提供此实现的API的基础上进行开发 。 相比之下,Netty并不一定要构建通信,提供会话管理甚至提供像TLS这样的安全性。 如果您要构建超低级网络应用程序,那就太好了; 但是,如果您正在构建REST服务,则可能不是最佳选