本文主要是介绍简单、有趣的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专题路线的规划,下面就直接进入正题~
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有了很好的支持。此外它整体具有以下几种特性:
- 轻量级
Ktor框架可以说是非常轻量级,仅仅有一些Ktor基础引擎内容,并没有冗杂一些其他的功能,甚至日志功能都没有,但是你可以任意选择定制你仅仅需要的功能,以构件形式可插拔地集成到Ktor框架中。
- 可扩展性强
可扩展性可以说是Ktor框架又一大亮点之一,Ktor框架的本质就Pipeline管道,任何的功能构件都可以可插拔方式集成在Pipeline中。比如Ktor官方提供一系列构件用于构建所需的功能,使用起来非常简单方便。
- 多平台
借助Kotlin Multiplatform技术构建,可以在任何地方部署Ktor应用程序.
- 异步
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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!