【问题标题】:Where to put dispatch.Http.shutdown()dispatch.Http.shutdown() 放在哪里
【发布时间】:2014-03-10 11:22:51
【问题描述】:

如果有 n 独立的 Http 调用,那么在哪里调用 dispatch.Http.shutdown(),例如:

import com.typesafe.scalalogging.slf4j.Logging
import org.json4s._
import org.json4s.native.JsonMethods._
import scala.util.{ Failure, Success }

object Main extends App with Logging {
  logger.debug("github.cli")

  // GET /users/defunkt: `curl https://api.github.com/users/defunkt`
  val host: dispatch.Req    = dispatch.host("api.github.com").secure
  val request: dispatch.Req = host / "users" / "defunkt"
  logger.debug(s"Request URL: ${request.url}")

  import dispatch.Defaults.executor

  dispatch.Http(request > dispatch.as.Response(_.getHeaders())) onComplete {
    case Success(h) => logger.debug(h.toString())
    case Failure(e) => logger.debug(s"Error: $e")
  }
  dispatch.Http(request OK dispatch.as.json4s.Json) onComplete {
    case Success(j) => logger.debug(j.toString())
    case Failure(e) => logger.debug(s"Error: $e")
  }

  //dispatch.Http.shutdown()    // <<<<< ?????
}

谢谢,/nm

编辑:这可能是一种选择,比如说,这是一种“正确”的方式吗?

val headers = dispatch.Http(request > dispatch.as.Response(_.getHeaders()))
val user    = dispatch.Http(request OK dispatch.as.json4s.Json)
val all     = dispatch.Future.sequence(headers :: user :: Nil)

headers onComplete {
  case Success(h) => logger.debug(s"Header: ${h.toString()}")
  case Failure(e) => logger.debug(s"Error: $e")
}
user onComplete {
  case Success(j) => logger.debug(s"User: ${j.toString()}")
  case Failure(e) => logger.debug(s"Error: $e")
}
all onComplete { case _ => dispatch.Http.shutdown() }

【问题讨论】:

标签: scala future scala-dispatch


【解决方案1】:

AFAIK 您只在应用程序结束时执行此操作(或者,严格来说,当您完成特定线程时),因为一旦完成,所有现有连接都将消失,您无法创建任何新连接。

【讨论】:

    猜你喜欢
    • 2014-03-14
    • 2013-03-09
    • 2012-09-22
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2011-08-29
    • 2015-02-17
    相关资源
    最近更新 更多