首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netty和Ktor抛出jetty.io.EofException

Netty和Ktor抛出jetty.io.EofException
EN

Stack Overflow用户
提问于 2020-07-22 01:24:02
回答 1查看 415关注 0票数 1

我正在用Ktor和Jetty创建一个应用程序。有一条规则,在采取特定操作之前,我需要检查端点是否向上/向下。为此,我创建了一个根据服务检查的函数。

代码语言:javascript
复制
suspend fun checkStatus(
  target: Target,
  login: String,
  passwordLogin: String,
  url: String
) {
  when (target) {
    Target.Elasticsearch -> {
      val client = HttpClient(Jetty) {
        install(Auth) {
          basic {
            username = login
            password = passwordLogin
          }
        }
      }
      runCatching {
        client.get<String>(url)
      }.onFailure {
        it.printStackTrace()
        throw it
      }
    }
  }
}

为了减小函数的大小,我使用了elasticsearch的示例。因此,我有一个函数来检查elasticsearch是否向上/向下

代码语言:javascript
复制
suspend fun checkElasticStatus(
  username: String,
  password: String,
  https: Boolean,
  host: String,
  port: String
) = checkStatus(
  target = Target.Elasticsearch,
  login = username,
  passwordLogin = password,
  url = if (https) "https://$host:$port" else "http://$host:$port"
)

因此,我在Controller中使用这个函数,然后再继续使用某些逻辑。

代码语言:javascript
复制
fun Route.orchestration() {
  route("/test") {
    post {
      runCatching {
        checkElasticStatus(
          environmentVariable(ev, "elk.username"),
          environmentVariable(ev, "elk.password"),
          environmentVariable(ev, "elk.https").toBoolean(),
          environmentVariable(ev, "elk.host"),
          environmentVariable(ev, "elk.port")
        )

        /** other codes **/
       }
     }
   }
 }

但我总是会犯错:

org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:283),org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422),org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277),org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:381),org.eclipse.jetty.http2.HTTP2Flusher.process(HTTP2Flusher.java:259),org.eclipse.jetty.util.IteratingCallback。处理(IteratingCallback.java:241)在org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223),org.eclipse.jetty.http2.HTTP2Session.newStream(HTTP2Session.java:543),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt:40),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt),io.ktor.client.engine.jetty.UtilsKt.withPromise(utils.kt:14),io.ktor.client.engine.jetty。JettyHttpRequestKt.executeRequest(JettyHttpRequest.kt:39) at io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$1.invokeSuspend(JettyHttpRequest.kt) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) 原因: java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:501) at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:263)的java.nio.channels.AsynchronousCloseException .又多了18 org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:283),org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422),org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277),org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:381),org.eclipse.jetty.http2.HTTP2Flusher.process(HTTP2Flusher.java:259),org.eclipse.jetty.util.IteratingCallback。处理(IteratingCallback.java:241)在org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223),org.eclipse.jetty.http2.HTTP2Session.newStream(HTTP2Session.java:543),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt:40),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt),io.ktor.client.engine.jetty.UtilsKt.withPromise(utils.kt:14),io.ktor.client.engine.jetty。JettyHttpRequestKt.executeRequest(JettyHttpRequest.kt:39) at io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$1.invokeSuspend(JettyHttpRequest.kt) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) 原因: java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:501) at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:263)的java.nio.channels.AsynchronousCloseException .又多了18

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 14:55:34

Jetty引擎只支持HTTP/2协议。

当我向只能使用HTTP/1.1 (例如http://www.google.com )响应的资源发出请求时,会引发http://www.google.com

然而,这一错误是误导性的,而且在the跟踪器中也有一个问题

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63025379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档