Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 获取响应时间_Scala_Http_Scala Dispatch - Fatal编程技术网

Scala 获取响应时间

Scala 获取响应时间,scala,http,scala-dispatch,Scala,Http,Scala Dispatch,有没有一种简单的方法来获取url请求的响应时间(除了在代码中单独记录时间之外) 您可以使用以下内容包装代码(未经测试): 您可以在伴生对象中使用工厂方法创建更具体的计时器,以帮助处理要测量的计算 用法: val timedComputation = Timer{Http(svc > (x => x))} timedComputation.result.onComplete{case _ => ???} //In a completed event: val responseTi

有没有一种简单的方法来获取url请求的响应时间(除了在代码中单独记录时间之外)


您可以使用以下内容包装代码(未经测试):

您可以在伴生对象中使用工厂方法创建更具体的计时器,以帮助处理要测量的计算

用法:

val timedComputation = Timer{Http(svc > (x => x))}
timedComputation.result.onComplete{case _ => ???}
//In a completed event:
val responseTimeInMillis: Long = timedComputation.responseTime.get

这是一种不同的计算所用时间的方法,可能需要更多的定制(比如处理故障,
非致命的
),但我认为这更为惯用。但它仅适用于
Future
s

首先,根据时间为结果创建一个类(也可以用元组替换),根据时间为失败创建一个类

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

case class ResultWithTime[ResultType](val result: ResultType, val time: Long)

class FailureWithTime(failure: Throwable, val time: Long) extends Throwable(failure)
然后创建一个方法,包装未来以执行,并在失败时处理案例(如果您不喜欢
future
map
recoverWith
方法(因为它们需要隐式
ExecutionContext
),可以使用
Promise

下面是一个如何使用它的示例:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.io.StdIn


object Y extends App {
   TimerFuture(Future{Thread.sleep(200); "Hello"})
     .onSuccess({case ResultWithTime(r, t) => println(s"Took $t ms to get: $r")})
   TimerFuture(Future{Thread.sleep(100); throw new NullPointerException()})
     .onFailure({case f: FailureWithTime => println(s"Took ${f.time} ms to get: ${f.getCause}")})
   StdIn.readLine()
}

当您需要响应时间时,包装它并使用包装器有什么不对吗?我猜没有什么:我该怎么做?`val'参数可能不能通过名称[error]类计时器[ResultType](val计算:=>Future[ResultType]){调用它抱怨的伴随对象中的“def apply(计算:=>Future[ResultType])={”它与“def apply”一起工作(计算:=>Future[com.ning.http.client.Response])={”我真傻。我忘了在那里添加泛型参数。已更新。如果您不喜欢此实现,我应该添加,'s模式使用
隐式val handler=modes.returnFuture compose modes.timeExecution
。在哪里可以找到使用rapture core执行此操作的完整代码示例?我尝试了readl中的示例我,但我不能让他们work@EmilD我认为上面的例子应该适用于呼叫站点。或者你的意思是可以这样使用?或者?
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

case class ResultWithTime[ResultType](val result: ResultType, val time: Long)

class FailureWithTime(failure: Throwable, val time: Long) extends Throwable(failure)
object TimerFuture {
  def apply[ResultType](fut: =>Future[ResultType]): Future[ResultWithTime[ResultType]] = {
    val startTime = System.currentTimeMillis
    fut.map(r => ResultWithTime(r, System.currentTimeMillis - startTime))
       .recoverWith{case t:Throwable =>
         Future.failed(new FailureWithTime(t, System.currentTimeMillis - startTime))
         }
  }
}
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.io.StdIn


object Y extends App {
   TimerFuture(Future{Thread.sleep(200); "Hello"})
     .onSuccess({case ResultWithTime(r, t) => println(s"Took $t ms to get: $r")})
   TimerFuture(Future{Thread.sleep(100); throw new NullPointerException()})
     .onFailure({case f: FailureWithTime => println(s"Took ${f.time} ms to get: ${f.getCause}")})
   StdIn.readLine()
}