KTor 站点无法访问
Posted
技术标签:
【中文标题】KTor 站点无法访问【英文标题】:KTor site not reachable 【发布时间】:2020-10-24 00:09:59 【问题描述】:我想用 ktor 做一个简单的 http 服务器。但是,当我进入该站点(127.0.0.1:8080 或 0.0.0.0:8080)时,它就不存在了。它不打印也不响应。 但是,如果我使用 NanoHttpd 而不是 ktor,一切正常。我的问题是什么?
import io.ktor.application.call
import io.ktor.http.ContentType
import io.ktor.response.respondText
import io.ktor.routing.get
import io.ktor.routing.routing
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
fun main()
val server = embeddedServer(Netty, port = 8080)
routing
get("/")
println("TEST")
call.respondText("Hello World!", ContentType.Text.Plain)
server.start(wait = true)
输出只是:
[main] INFO ktor.application - No ktor.deployment.watch patterns specified, automatic reload is not active
[main] INFO ktor.application - Responding at http://0.0.0.0:8080
【问题讨论】:
你能告诉我你正在使用的操作系统吗? @Leonid Windows 10。如果我用 Jetty 切换 Netty,它显然可以工作,现在我不知道如何禁用日志 在浏览器中查看该地址localhost:8080
@Ramin eghbalian 没什么,至少在我使用 Netty 时是这样
尝试使用application.conf
- ktor.io/servers/configuration.html更改端口
【参考方案1】:
可能是以下情况之一:
-
应用代码
运行配置
我倾向于运行配置而不是应用程序代码存在问题。
应用代码
即使我认为您的问题与运行配置有关,但如果不是,我在此处提供示例代码。
当我使用IntelliJ Ktor plugin 时,Ktor 应用的引导方式如下:
Application.kt
package com.example
import io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
@kotlin.jvm.JvmOverloads
@Suppress("unused") // Referenced in application.conf
fun Application.module(testing: Boolean = false)
routing
get("/")
call.respondText("Hello, world!", ContentType.Text.Plain)
application.conf
ktor
deployment
port = 8080
port = $?PORT
application
modules = [ com.example.ApplicationKt.module ]
我在这里提供了一个示例 Ktor 代码库:https://gitlab.com/tinacious/ktor-example
运行配置
这可能是您在 IntelliJ 中的运行配置。它需要设置为 Kotlin 脚本(而不是应用程序)。当它设置为应用程序时,我会遇到与您相同的错误。以下是如何设置我的运行配置,允许我在 IntelliJ 中运行服务器:
-
添加配置
从模板部分选择 Kotlin 脚本。不要选择应用程序。
在“使用模块的类路径”的底部附近选择您的
application.main
。
在显示“主类”的顶部附近,您应该能够选择您的主应用程序。我发现这只是在我选择了模块的类路径后才出现的。
以下是配置中的相关部分:
这是我在第 4 步中描述的,即添加类路径后我可以选择我的主类:
运行符号应该是 Kotlin 标志:
我建议安装 IntelliJ Ktor plugin 来引导您的项目。它使用 Gradle 并引导所有内容,因此当您运行 ./gradlew run
时,您正在正确运行它并且无需手动构建配置步骤即可访问它。
【讨论】:
以上是关于KTor 站点无法访问的主要内容,如果未能解决你的问题,请参考以下文章