7

シンプルな REST 風の API のために、クライアントで Databinder Dispatch ライブラリを使用してきました。エラーステータスの HTTP 応答を取得したかどうかを検出する方法を知っています。

Http x (request) {
    case (200, _, _, content) => successResult(content())
    case (404, _, _, _) => notFoundErrorResult
    case (_, _, _, _) => genericErrorResult
}

しかし、無効なドメインまたは接続の失敗が原因で、エラー応答とまったく応答が得られないことをどのように区別できますか? また、同期セマンティクスを使用しながらタイムアウトを実装する方法はありますか? API に関連するものがある場合、私はそれを見逃しています。

4

3 に答える 3

15

関数を引数としてHttp.configure受け取るメソッドを使用してクライアントを構成する、より洗練された方法もあります。Builder => Builder

val http = Http.configure(_.setAllowPoolingConnection(true).setConnectionTimeoutInMs(5000))
于 2013-03-26T07:47:38.580 に答える
4

周期表>!は、例外リスナーをセットアップすることを教えてくれます。最近のメーリング リストのスレッドでは、タイムアウトを設定する方法が説明されています。

一緒にすると、次のようなことができます。

val http = new dispatch.Http {
  import org.apache.http.params.CoreConnectionPNames
  client.getParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000)
  client.getParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000)
}
http(req >! {
  case e => // ...
})

私はこれをテストしていないことに注意してください...

于 2012-03-13T00:13:09.073 に答える
3

Dispatch の再起動を使用している場合 (AsyncHttpClient を基になるライブラリとして使用)、クライアント構成を次のように設定します。

val myHttp = new dispatch.Http {
  import com.ning.http.client._
  val builder = new AsyncHttpClientConfig.Builder()
  builder.setCompressionEnabled(true)
    .setAllowPoolingConnection(true)
    .setRequestTimeoutInMs(5000)
  override lazy val client = new AsyncHttpClient(builder.build())
}

そして、他の方法で使用するように、この新しいオブジェクトを使用するだけですhttp:

myHttp((url(baseUrl) <<? args) OK as.xml.Elem).either
于 2012-08-29T01:49:56.060 に答える