前言:
今天你们对“nettyjetty对比”大致比较注意,各位老铁们都想要剖析一些“nettyjetty对比”的相关资讯。那么小编同时在网摘上搜集了一些有关“nettyjetty对比””的相关知识,希望姐妹们能喜欢,大家快快来了解一下吧!《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐是Ktor 是一个用于创建微服务、Web 应用程序等的异步框架。
Ktor 是一个框架,可以轻松构建连接的应用程序——Web 应用程序、HTTP 服务、移动和浏览器应用程序。现代连接的应用程序需要异步才能为用户提供最佳体验,而 Kotlin 协程提供了非常棒的设施,可以以简单直接的方式完成。Ktor 的目标是为连接的应用程序提供端到端的多平台框架。
原则
无限制
Ktor 框架并没有对项目将要使用的技术施加很多限制——日志记录、模板、消息传递、持久性、序列化、依赖注入等。有时可能需要实现一个简单的接口,但通常它是编写转换或拦截函数的问题。使用允许构建任意管道的统一拦截机制将功能安装到应用程序中。
Ktor 应用程序可以托管在任何支持 Servlet 3.0+ API 的 servlet 容器中,例如 Tomcat,或者使用 Netty 或 Jetty 独立运行。可以通过统一的托管 API 添加对其他主机的支持。
Ktor API 主要是使用 lambda 的函数调用。由于 Kotlin DSL 功能,代码看起来是声明性的。应用程序组合完全取决于开发人员的选择——使用函数或类,使用依赖注入框架或在主函数中手动完成。
异步
Ktor 管道机制和 API 正在利用 Kotlin 协程提供易于使用的异步编程模型,而不会使其过于繁琐。所有主机实现都使用异步 I/O 工具来避免线程阻塞。
可测试
Ktor 应用程序可以托管在一个特殊的测试环境中,它在一定程度上模拟了一个 Web 服务器,而无需实际进行任何联网。它提供了一种简单的方法来测试应用程序而无需模拟太多东西,并且在验证应用程序调用时仍然可以获得良好的性能。当然,也可以使用真正的嵌入式 Web 服务器运行集成测试。
Ktor服务端
创建一个新的 Ktor 项目
单击新建项目。否则,从主菜单中选择File | NewProject。在New Project向导中,从左侧的列表中选择Ktor 。在右侧窗格中,您可以指定以下设置:Name:指定项目名称。Location:为您的项目指定一个目录。Build System:选择所需的构建系统。这可以是带有 Kotlin 或 Groovy DSL 或Maven的Gradle。Website:指定用于生成包名称的域。Artifact:此字段显示生成的工件名称。Ktor 版本:选择所需的 Ktor 版本。Engine:选择用于运行服务器的引擎。Configuration in: 选择是在代码中还是在 HOCON 文件中指定服务器参数。Add sample code:启用此选项可为下一页添加的插件添加示例代码。
在下一页上,您可以选择一组插件- 提供 Ktor 应用程序常用功能的构建块,例如身份验证、序列化和内容编码、压缩、cookie 支持等。
现在,让我们只安装路由插件来处理传入的请求。开始在左上角的搜索框中输入routing ,在列表中找到Routing,然后单击Add。
单击创建并等待 IntelliJ IDEA 生成项目并安装依赖项。
Ktor客户端
创建客户端应用程序
Ktor 包含一个多平台异步 HTTP 客户端,它允许您发出请求和处理响应,使用插件扩展其功能,例如身份验证、JSON 序列化等。在本教程中,我们将创建一个简单的客户端应用程序来发送请求和接收响应。
为了试用 Ktor 客户端,我们将创建一个 Kotlin/JVM 项目。打开 IntelliJ IDEA,然后按照以下步骤操作:
单击新建项目。否则,从主菜单中选择File | NewProject。在New Project向导中,从左侧列表中选择Kotlin Multiplatform 。在右窗格中,指定以下设置:Name:指定项目名称。Location:为您的项目指定一个目录。Project Template:在JVM组中选择控制台应用程序。Build System:确保选择了Gradle Kotlin。
在下一页上,将Test framework更改为None,单击Finish并等待 IntelliJ IDEA 生成项目并安装依赖项。
测试
添加依赖项
testImplementation("io.ktor:ktor-client-mock:$ktor_version")
用法
共享客户端配置
CIO 引擎用于发出请求。安装Json插件以反序列化传入的 JSON 数据。
要测试这个客户端,它的配置需要与一个测试客户端共享,它使用MockEngine. 要共享配置,可以创建一个客户端包装类,该类将引擎作为构造函数参数并包含客户端配置。
@Serializabledata class IpResponse(val ip: String)class ApiClient(engine: HttpClientEngine) { private val httpClient = HttpClient(engine) { install(ContentNegotiation) { json() } } suspend fun getIp(): IpResponse = httpClient.get(";).body()}
然后可以使用ApiClient如下方式使用CIO引擎创建 HTTP 客户端并发出请求。
fun main() { runBlocking { val client = ApiClient(CIO.create()) val response = client.getIp() println(response.ip) }}
测试客户端
要测试客户端,需要创建一个带有处理程序的MockEngine实例,该处理程序可以检查请求参数并以所需内容(在我们的示例中为 JSON 对象)进行响应。
val mockEngine = MockEngine { request -> respond( content = ByteReadChannel("""{"ip":"127.0.0.1"}"""), status = HttpStatusCode.OK, headers = headersOf(HttpHeaders.ContentType, "application/json") )}
然后,可以通过 createdMockEngine来初始化ApiClient并做出所需的断言。
class ApiClientTest { @Test fun sampleClientTest() { runBlocking { val mockEngine = MockEngine { request -> respond( content = ByteReadChannel("""{"ip":"127.0.0.1"}"""), status = HttpStatusCode.OK, headers = headersOf(HttpHeaders.ContentType, "application/json") ) } val apiClient = ApiClient(mockEngine) Assert.assertEquals("127.0.0.1", apiClient.getIp().ip) } }}
—END—
开源协议:Apache-2.0 license
开源地址:
标签: #nettyjetty对比