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 站点无法访问的主要内容,如果未能解决你的问题,请参考以下文章

VPS:无法访问此站点

无法访问 http://www。项目内的站点

无法访问此站点花费了太长时间 - Laravel

无法访问此站点:localhost 拒绝连接

无法通过域 URL 访问 Nginx 站点

移动 wordpress 站点后无法访问此站点