Как вывести, что сервер запущен

#kotlin #vert.x #kotlin-coroutines

#kotlin #vert.x #kotlin-сопрограммы

Вопрос:

У меня есть следующий код, который будет запускать http-сервер:

 class MainVerticle : CoroutineVerticle() {

  override suspend fun start() {

    val server = vertx.createHttpServer()

    val router = Router.router(vertx)
    router.route("/api/genders*")
      .subRouter(GenderApi(vertx).create())

    server.requestHandler(router)
      .listen(8080)
      .await()

  }
}
  

Теперь я хотел бы вывести, был ли сервер успешно запущен или произошел сбой (в случае, если порт уже занят).

Без сопрограммы коды будут:

 class MainVerticle : AbstractVerticle() {

    override fun start(startPromise: Promise<Void>) {
        val server = vertx.createHttpServer()

        val router = Router.router(vertx)

        server.requestHandler(router).listen(8888) { http ->
            if (http.succeeded()) {
                startPromise.complete()
                println("HTTP server started on port 8888")
            } else {
                println(http.cause())
                startPromise.fail(http.cause());
            }
        }
    }
}
  

Здесь я делаю вывод, если сервер был запущен успешно или нет.

Ответ №1:

Если вы используете сопрограммы, добавьте блок try / catch:

 class MainVerticle : CoroutineVerticle() {

  override suspend fun start() {

    val server = vertx.createHttpServer()

    val router = Router.router(vertx)
    router.route("/api/genders*")
      .subRouter(GenderApi(vertx).create())

    try {
      server.requestHandler(router)
        .listen(8080)
        .await()
      println("HTTP server started on port 8888")
    } catch (e: Exception) {
      println(http.cause())
      throw e
    }

  }
}