0

我在 Scala 2.10.2 上,想使用 Apache http 客户端 4.2.5 实现线程安全的 http 提供程序,这就是我所做的

import net.liftweb.json._
import net.liftweb.json.JsonDSL._
import scala.concurrent.Future

object AsyncHttpProvider {
  import org.apache.http.client._
  import org.apache.http.client.methods._
  import org.apache.http.impl.client._

  val httpclient = new DefaultHttpClient

  private def get(query: String) = {
    val httpget = new HttpGet(query)
    val brh = new BasicResponseHandler
    httpclient.execute(httpget, brh)
  }

  def getResponseBodyAsJValue(query: String): Future[JValue] = Future(parse(get(query)))
  def getResponseBodyAsJsonString(query: String): Future[String] = Future(get(query))
}

由于我正在使用Future,我想确保代码是线程安全的,是吗?

4

1 回答 1

1

据记载, DefaultHttpClient 是线程安全的(http://hc.apache.org/httpcomponents-client-ga/tutorial/html/httpagent.html),但您不需要在“get”函数中重新创建它。通常,客户端创建非常昂贵,并且实例化一个或多个池化实例以跨线程共享可能更有效。在这种情况下,您可以创建实例或将实例注入您的对象并在 Future 中引用它。唯一要创建的新东西是方法和响应处理程序。

说到异步调用,你也可以考虑看看http://hc.apache.org/httpcomponents-asyncclient-dev/examples.html

于 2013-07-26T23:58:41.097 回答