10、Ktor学习-运行程序和基础架构;
在外部主机中运行应用程序
当您需要在独立维护的主机(例如Tomcat)中运行Ktor应用程序时,您需要一个application.conf文件来告诉Ktor如何启动您的应用程序。
定义配置
在resources文件夹中,创建名为application.conf的文件使用以下内容:
ktor {deployment {port = 8080}application {modules = [ my.company.MyApplication.ApplicationKt.main ]}
}
从IDE内部运行应用程序
使用开发引擎支持在诸如IntelliJ IDEA的开发环境中运行应用程序。
使用“Application”作为模板创建新的运行配置。
对于主类,请使用以下引擎之一:
- Netty: 使用 io.ktor.server.netty.EngineMain
- Jetty: 使用 io.ktor.server.jetty.EngineMain
指定要使用的模块。
通过为其命名来保存配置。
保存配置后,您现在可以从IntelliJ/IDEA内部运行应用程序以进行开发/调试,而无需部署到容器或设置任何应用程序服务器。
使用自动重新加载
当检测到对类文件的更改时,即构建应用程序时,Ktor可以自动重新加载应用程序。通过向application.conf添加watch配置来启用此功能:
ktor {deployment {port = 8080watch = [ my.company ]}…
}
基础架构
切入点
您可以通过多种方式运行Ktor应用程序:
- 用一个普通的main来调用embeddedServer
- 运行EngineMain主函数并使用HOCON application.conf配置文件
- 作为Web服务器中的Servlet
启动
公共部分
ApplicationEngineEnvironment:
首先,必须建立这种不可变的环境;使用classLoader,Logger,配置,充当应用程序事件的事件总线的监视器,以及将形成应用程序和watchPaths的一组连接器和模块。
您可以使用ApplicationEngineEnvironmentBuilder构建它,并使用方便的DSL函数applicationEngineEnvironment,commandLineEnvironment等。
ApplicationEngine:
有多个ApplicationEngine,每个都支持对应的服务器,如:Netty,Jetty,CIO或Tomcat。
ApplicationEngine是负责运行应用程序的类,它具有特定的配置,相关的环境,可以启动和停止。
当您启动特定的ApplicationEngine时,它将使用提供的配置来监听,通过使用SSL,证书等与正确的端口和主机,以及指定的工作程序。
连接器将用于侦听特定的http/https主机和端口。 而Application管道将用于处理请求。
Application : Pipeline:
它由ApplicationEngineEnvironment创建,最初为空。它是一个没有主题的Pipeline,它将ApplicationCall作为上下文。 在创建环境时,将调用每个指定的模块来配置此应用程序。
embeddedServer
当您运行自己的main方法并调用embeddedServer函数时,它将提供特定的ApplicationEngineFactory,然后创建或提供ApplicationEngineEnvironment。
EngineMain
Ktor为每个支持的服务器引擎定义了一个EngineMain类。此类定义可以执行以运行应用程序的main方法。 通过使用commandLineEnvironment,它将从您的资源加载HOCON application.conf文件,并将使用额外的参数来确定要安装的模块以及如何配置服务器。
这些类通常在CommandLine.kt文件中声明。
- CIO: io.ktor.server.cio.EngineMain.main
- Jetty: io.ktor.server.jetty.EngineMain.main
- Netty: io.ktor.server.netty.EngineMain.main
- Tomcat: io.ktor.server.tomcat.EngineMain.main
监控事件
与环境相关联的是Ktor用于引发应用程序事件的监视器实例。 可以使用它来订阅事件。 例如,您可以订阅停止应用程序事件以关闭特定服务或完成某些资源。
val ApplicationStarting = EventDefinition<Application>()
val ApplicationStarted = EventDefinition<Application>()
val ApplicationStopPreparing = EventDefinition<ApplicationEnvironment>()
val ApplicationStopping = EventDefinition<Application>()
val ApplicationStopped = EventDefinition<Application>()
管道(Pipelines)
Ktor定义了异步可扩展计算的管道。 管道在Ktor各处使用。
所有管道都具有关联的主题类型,上下文类型以及与其关联的拦截器的阶段列表。 以及充当小型对象容器的属性。
阶段是有序的,可以定义为在另一阶段之后或之前,或在结束时执行。
每个管道都有一个该实例的相位上下文的有序列表,其中包含每个阶段的一组拦截器。
ApplicationCallPipeline
Ktor的服务器部分定义了一个没有主题的ApplicationCallPipeline管道,并将ApplicationCall定义为上下文。 Application实例是ApplicationCallPipeline。
因此,当服务器的应用程序引擎处理HTTP请求时,它将执行Application管道。
上下文类ApplicationCall包含应用程序,请求,响应以及属性和参数。
最后,应用程序模块将结束为应用程序管道的特定阶段注册拦截器,以处理请求并发出响应。
val Setup = PipelinePhase("Setup") //用于准备Call和处理属性的阶段
val Monitoring = PipelinePhase("Monitoring") // 跟踪调用的阶段:日志记录,指标,错误处理等。
val Features = PipelinePhase("Features") // 基础设施功能的阶段,在此阶段的大多数拦截
val Call = PipelinePhase("Call") // 用于处理Call和发送响应的阶段
val Fallback = PipelinePhase("Fallback") // 处理未处理Call的阶段
Features(功能)
Ktor使用ApplicationFeature类定义应用程序功能。 您可以将功能安装到特定管道。 它可以访问管道,它可以注册拦截器并执行各种其他操作。
路由
为了说明功能和管道树如何协同工作,与其他功能一样,路由通常安装如下:
install(Routing) { }
但是有一种简单的方法可以注册并开始使用它,如果它已经注册,它也会安装它:
routing { }
路由被定义为树,其中每个节点都是Route,它也是ApplicationCallPipeline的单独实例。 因此,当执行根路由节点时,它将执行自己的管道。 并且在处理完路线后将停止执行。
10、Ktor学习-运行程序和基础架构;相关推荐
- SolarWinds 升级 APM Suite,简化应用程序和基础架构管理!
2020 年 6 月 12 日 – IT管理软件供应商SolarWinds (NYSE:SWI) 宣布,其旗下的 IT网络安全解决方案组合产品SolarWinds® APM Suite将带来新增和改进 ...
- 飞鸽传书程序IT基础架构和应用的管理
同第一家公司相比,虽然新换的公司在薪酬方面没有质的提升,但是至少公司规模大了很多,在一个超过1000人的企业里工作,至少你能学习到规范化的制度流程,标准化的IT管理.而且企业的人数上去了之后,IT基础 ...
- OceanBase 从0到1数据库内核实战教程学习笔记 - 3.OceanBase基础架构和开发技巧
这篇文章主要介绍王泽林老师分享的 <OceanBase 的基础架构和开发技巧>.如果您看过第一篇文章的对应视频,会发现整个系列主要分为 MiniOB 和 OceanBase 两个系列,本篇 ...
- Android 10 Camera学习笔记:Camera Framework架构
CameraFramework架构 又是很久没有写了,这几天一直在看camera framework相关源码,于是乎整理出了这个架构图.Camera API2比较好整理,反而是Camera API1花 ...
- MySQL学习笔记一之基础架构
MySQL学习笔记一之架构@TOC 架构图如下 Server层 连接器 负责跟客户端建立连接.获取权限.维持和管理连接 客户端如果太长时间没有动静,连接器会将其自动断开,时间由参数wait_timeo ...
- 学习记录-程序语言基础(1)
1.汇编程序的功能是将用汇编语言编写的源程序翻译成机器指令程序.他一般至少需要两次扫描源程序才能完成翻译过程. 2.编译程序也称编译器,功能是把用高级语言书写的源程序翻译成与之等价的目标程序.编译过程 ...
- MySQL运行原理与基础架构
下面是关于上述部件的介绍: connectors 与其他编程语言中的sql 语句进行交互,如php.java等. Management Serveices & Utilities 系统管理和控 ...
- 【数据架构】Netflix 万亿级实时数据基础架构的四个创新阶段
我叫徐振中.我于 2015 年加入 Netflix,担任实时数据基础架构团队的创始工程师,后来领导了流处理引擎团队.我在 2010 年代初对实时数据产生了兴趣,从那时起我就相信还有很多价值有待发掘. ...
- MySQL的基础架构以及一条查询sql语句的执行流程
详细介绍了Mysql的基础架构以及一条查询sql的执行流程. 如果不想作为一个只能简单的写写sql工程师,而是想要深入的学习MySQL,那么我们有必要首先从宏观的角度来了解MySQL的整体架构,只有把 ...
最新文章
- 为创业者保驾护航 “无安全 不创业” 安全狗全国路演北京站
- DIP第十章习题解答
- 轻量级3d模型查看器_耐能取得两项软件著作权,自研轻量级3D人脸识别算法领先业界...
- 【java】用javaSE来实现对mysql数据库的增删改查
- linux100day(day7)--用户管理和权限管理简单介绍
- 实战爬虫-爬取红袖添香并存入数据库
- Maven(4)--- 构建生命周期
- PHP中面向对象分析设计的经验总结
- SEGGER RTT使用总结
- matlab-基础 取整函数 向0取整 取最近整数 向上取整 向下取整
- 博途运行软件仿真步骤
- 浅谈Spring @Order注解的使用
- centos7环境下编译bitcoin
- Python 爬取手机 豆果美食app存Mongodb
- 篮球记分牌c语言程序和报告,基于单片机的篮球比赛电子记分牌最终版(备份存档)...
- 如何定位前后端Bug
- 电磁场与仿真软件(28)
- couldnotfindartifactcom.orcale:ojdbc6:pom:11.2.0.1.0innexus-aliyun
- java读取Excel指定格式的数据
- Java学习手册:Java是否支持多继承?为什么?
热门文章
- Struts和Spring使用的模板初探
- (剑指Offer)面试题61:按之字形顺序打印二叉树
- linux学习之yum命令的使用
- JS:1.2,控制语句(if,if else,for,switch,while,do while)
- 网络工程师应掌握的50个路由器知识要点
- linux中文件记录的时间参数,【Linux】stat命令查看文件的三个时间参数
- 如何系统的学习单片机?
- php根据时间搜索,yii2实现根据时间搜索的方法
- AttributeError: module ‘tensorflow‘ has no attribute ‘applications‘
- 2021牛客暑期多校训练营(二) J. Product of GCDs 不动脑子的莫比乌斯反演做法(