简单、有趣的Kotlin异步微服务框架(一): 初始Ktor

2024-08-27 14:32

本文主要是介绍简单、有趣的Kotlin异步微服务框架(一): 初始Ktor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

1. 写在前面

Flutter异步编程相关的系列文章已经讲解完毕后,大概已经两周没有发布文章,因为我又开始在筹划了另一个Kotlin相关的专题: Kotlin微服务框架Ktor。 这次专题主要是介绍Kotlin在服务端应用的一个微服务异步web框架。

为什么又开始Kotlin服务端Ktor专题呢?

因为之前在2020年度总结文章也说过,后续会主要focus在Kotlin、Flutter、面试三大主题展开一系列文章总结,所以开始Kotlin服务端Ktor专题也是在规划路线之中。不仅会涉及到Kotlin服务端专题后续还会在Kotlin jetpack Compose方面、Flutter系列都会展开。

原来Flutter专题会继续吗?此次Kotlin服务端Ktor专题文章,Flutter学习者有必要看吗?

Flutter专题当然会继续,此次开始Kotlin服务端Ktor专题是希望最后会通过Ktor作为API服务后端框架+Flutter作为页面前台搭建一套完整的从前到后的全栈应用。我们都知道作为一名客户端或前端开发者,上手后端门槛是比较高的。比如Java语言的Spring、SpringBoot框架,Go、python相关的后端框架等等。而现在的Ktor就是一套非常非常简单、轻量级的异步Kotlin后端框架, 它比SpringBoot更加轻量级,仅仅只需少量代码就能快速搭建一套API后端服务。

个人还是强烈推荐Flutter学习者学习下 , 特别是有了Kotlin基础的Android开发者 。对于我们大前端开发者很多的能力思维还仅仅停留在大前端,但是如果你能有一项后端开发的技能,那么你思考问题和解决问题角度就会不一样的。当然我们不需要像后端开发者那样很精通后端开发领域,但是如果能掌握后端基本的开发和使用,还是有很大的帮助的。至少之前作为一名Flutter开发者,学习完后可以自己从前端UI页面搭建到后端API设计、数据表设计撸一整套的应用。为什么不推荐客户端开发者去直接学Spring或SpringBoot,说真的因为框架东西比较多,成本比较高,所以这次Ktor这个微服务框架简单且易用,学习成本较低,所以还是值得试试的。
以下这张图就是后续Ktor专题路线的规划,下面就直接进入正题~
image.png

2. 什么是Ktor

2.1 Ktor基本介绍

用Ktor官方(https://ktor.io/)一句话来介绍: Ktor是一个用于创建微服务、web应用程序等异步框架,它很简单、有趣并且免费开源。它是由jetbrains官方开源,目前已经有8.2K+ star (https://github.com/ktorio/ktor),该框架在国内大家可能比较陌生但是在国外还是很受欢迎的,Ktor可以说是为Kotlin中异步而生的框架,它最底层基于Kotlin Coroutine协程框架,支持了Client、Server双端异步特性并且在Client、Server双端上对WebSocket、Socket有了很好的支持。此外它整体具有以下几种特性:
image.png

  • 轻量级

Ktor框架可以说是非常轻量级,仅仅有一些Ktor基础引擎内容,并没有冗杂一些其他的功能,甚至日志功能都没有,但是你可以任意选择定制你仅仅需要的功能,以构件形式可插拔地集成到Ktor框架中。

  • 可扩展性强

可扩展性可以说是Ktor框架又一大亮点之一,Ktor框架的本质就Pipeline管道,任何的功能构件都可以可插拔方式集成在Pipeline中。比如Ktor官方提供一系列构件用于构建所需的功能,使用起来非常简单方便。

  • 多平台

借助Kotlin Multiplatform技术构建,可以在任何地方部署Ktor应用程序.
image.png

  • 异步

Ktor底层是基于Kotlin协程构建的,Ktor的异步具有很高的可伸缩性,并且利用其非阻塞式特性,从此摆脱了异步回调地狱。

2.2 Ktor的架构组成

Ktor Framework主要分为以下几层,最底层核心是Kotlin协程和基本SDK,然后往上是Ktor核心基础层,包括了引擎、管道、构件、路由、监控等;再往上就是四大主要功能模块分别是Client模块、Server模块、Socket模块、WebSocket模块。那么该专题主要是focus在Server模块,主要利用Server模块来构件web后端服务。关于WebSocket实际上Ktor分别在Client WebSocket和Server WebSocket两个层面都给了很大的支持。后续会基于WebSocket使用构建一个实时IM应用的例子。所以整体上来看Ktor框架还是比较简单和轻量级的,最为功能丰富在于它的功能构件(Feature), 几乎后续所有web后端服务功能都可以看成作为它的一个功能构件(Feature)集成到Ktor中,比如序列化(gson、jackson)、日志、auth认证、template模版(freemarker、velocity)、CORS(解决跨域问题配置)、Session等功能
![image.png](https://img-blog.csdnimg.cn/img_convert/71e96ffaa5b8463616d2f9ea77766cb2.png#align=left&display=inline&height=496&margin=[object Object]&name=image.png&originHeight=496&originWidth=1145&size=133092&status=done&style=stroke&width=1145)

3. 如何构建一个简单的Ktor Server应用

构建一个Ktor Server应用可以说是非常非常简单,仅仅只需简单十几行代码就构建一个Server服务。而构建Ktor Server应用主要分为两种 : 一种是通过embeddedServer方式构建,另一种则是通过EngineMain方式构建。

3.1 通过embeddedServer方式构建

通过embeddedServer函数构建Ktor Server应用是一种最为简单的方式也是官方默认推荐使用的一种方式。embeddedServer函数是通过在代码中配置服务器参数并快速运行应用程序的简单方法,不需要额外配置文件。比如在下面的代码段中,它接收服务器容器引擎类型和端口参作为参数,传入Netty服务器容器引擎和端口8080,启动应用后就会在8080端口监听。

  • Application.kt
package com.mikyou.ktor.samplecom.mikyou.ktor.sampleimport io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*fun main(args: Array<String>) {embeddedServer(Netty, port = 8080) {//除了支持Netty还支持Jetty、Tomcat、CIO(Coroutine-based I/O)routing {get("/") {call.respondText("Hello Ktor")}}}.start(wait = true)
}
3.2 通过EngineMain方式构建

EngineMain方式则是选定的引擎启动服务器,并加载外部一个 application.conf 文件中指定的应用程序模块. 然后在 application.conf 配置文件中配置应用启动参数,比如服务监听端口等

  • Application.kt
package com.mikyou.ktor.sampleimport io.ktor.application.*
import io.ktor.response.*
import io.ktor.routing.*fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)fun Application.module(testing: Boolean = false) {//该module函数实际上是Application的扩展函数,要想该函数运行需要通过application.conf中配置该函数routing {get("/") {call.respondText("Hello Ktor")}}
}
  • application.conf
ktor {deployment {port = 8080 //配置端口}application {modules = [ com.mikyou.ktor.sample.ApplicationKt.module ] //配置加载需要加载的module函数}
}

4. 如何架构一个成熟的Ktor应用

由上面可知构建一个简单的Ktor Server可以说是非常简单,然而要构建一个成熟的Ktor Server应用也是类似,主要是多了一些如何模块化组织业务模块和更清晰化去架构业务。
主要分为以下7个步骤:
![image.png](https://img-blog.csdnimg.cn/img_convert/e2d0a24198c69ba580617c4093323064.png#align=left&display=inline&height=617&margin=[object Object]&name=image.png&originHeight=617&originWidth=1475&size=221122&status=done&style=stroke&width=1475)

4.1 选择构建Server的方式

构建Ktor Server应用主要分为两种: 一种是通过embeddedServer方式构建,另一种则是通过EngineMain方式构建。 具体的选择使用方式参考上面第3节

4

这篇关于简单、有趣的Kotlin异步微服务框架(一): 初始Ktor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111939

相关文章

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Kotlin 枚举类使用举例

《Kotlin枚举类使用举例》枚举类(EnumClasses)是Kotlin中用于定义固定集合值的特殊类,它表示一组命名的常量,每个枚举常量都是该类的单例实例,接下来通过本文给大家介绍Kotl... 目录一、编程枚举类核心概念二、基础语法与特性1. 基本定义2. 带参数的枚举3. 实现接口4. 内置属性三、

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应