Kotlin 如何从代码运行Ktor嵌入式服务器
我编写了一个简单的Ktor服务器,它处理来自传入POST请求的JSON负载。现在,我想从另一个应用程序生成此服务器,并在处理请求后将其关闭 因此,我需要解决的第一个问题是:如何从其他“驱动程序”Kotlin代码生成Ktor服务器?我在网上找到的所有教程都有1-2年的历史,而且显然使用的是旧版本的Ktor,其中的主要类如下所示:Kotlin 如何从代码运行Ktor嵌入式服务器,kotlin,server,ktor,Kotlin,Server,Ktor,我编写了一个简单的Ktor服务器,它处理来自传入POST请求的JSON负载。现在,我想从另一个应用程序生成此服务器,并在处理请求后将其关闭 因此,我需要解决的第一个问题是:如何从其他“驱动程序”Kotlin代码生成Ktor服务器?我在网上找到的所有教程都有1-2年的历史,而且显然使用的是旧版本的Ktor,其中的主要类如下所示: fun main(args:Array){ 嵌入式服务器(Netty,8080){ 路由{ 获取(“/”){ call.respondText(“来自Kotlin后端的H
fun main(args:Array){
嵌入式服务器(Netty,8080){
路由{
获取(“/”){
call.respondText(“来自Kotlin后端的Hello”,ContentType.Text.Html)
}
}
}.start(等待=真)
}
很容易看出,只要从任何地方运行embeddedServer(Netty,8080){…}.start(wait=true)
,就可以生成服务器。但我昨天下载了IntelliJ IDEA的Ktor插件,最近情况似乎发生了变化。这就是新的主类的外观:
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
install(ContentNegotiation) {
gson {
}
}
routing {
get("/") {
call.respondText("HELLO WORLD!", contentType = ContentType.Text.Plain)
}
get("/json/gson") {
call.respond(mapOf("hello" to "world"))
}
}
}
fun main(args:Array):Unit=io.ktor.server.netty.EngineMain.main(args)
@Suppress(“unused”)//在application.conf中引用
@kotlin.jvm.jvm重载
fun Application.module(测试:Boolean=false){
安装(内容协商){
格森{
}
}
路由{
获取(“/”){
call.respondText(“HELLO WORLD!”,contentType=contentType.Text.Plain)
}
获取(“/json/gson”){
call.response(mapOf(“你好”到“世界”))
}
}
}
现在,Application.module(…)
函数负责设置路由和内容,而服务器的实际运行是由io.ktor.server.netty.EngineMain.main(args)
在内部完成的。此外,端口号等属性是从application.conf
文件中引用的,我不太确定它是如何找到该application.conf
文件的
我已经能够使用gradlew
运行此Ktor服务器。我还了解到,可以将其导出为可执行jar并运行(如前所述)。但我不知道如何从代码中运行它。有什么建议吗
编辑:如果我可以从驱动程序代码中设置端口号,那就太好了。问题似乎与Android上的资源放置位置有关。我不知道这会在哪里,但你试过把它们放在那里吗?@HadiHariri实际上,我正试图从IntelliJ插件运行此服务器。@HadiHariri无论如何,我将Ktor和IntelliJ插件/依赖项合并到一个
build.gradle
文件中。然后我将application.conf
放在src/main/resources
文件夹中,并将main.resources.srcDirs=['src/main/resources']
添加到build.gradle
文件中的sourceset
。当我运行所有程序时,我得到了错误信息没有提供配置
。