简单、有趣的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

相关文章

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要