首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步模拟网络延迟

异步模拟网络延迟
EN

Stack Overflow用户
提问于 2011-11-07 20:16:59
回答 1查看 326关注 0票数 2

我有一个Scala应用程序,它的某些功能依赖于外部RESTful its服务。我们想在应用程序上做一些性能测试,所以我们用一个伪造响应的内部类来存根webservice。

为了使性能测试尽可能真实,我们希望保留的一件事是来自远程主机的网络延迟和响应时间。这是在50到500毫秒之间(我们测量的)。

我们的第一个尝试是简单地做一个Thread.sleep(random.nextInt(450) + 50),但是我不认为这是准确的--我们使用非阻塞的NIO,而Thread.sleep阻塞并锁定整个线程。

有没有一种(相对简单/简短)的方法来存根一个方法,该方法联系外部资源,然后在准备好时返回并调用回调对象?我们想要替换为存根实现的代码如下所示(使用Sonatype的AsyncHttpClient),其中我们将其完成处理程序对象包装在我们自己的处理程序中:

代码语言:javascript
复制
def getActualTravelPlan(trip: Trip, completionHandler: AsyncRequestCompletionHandler) {
    val client = clientFactory.getHttpClient
    val handler = new TravelPlanCompletionHandler(completionHandler)
    // non-blocking call here.
    client.prepareGet(buildApiURL(trip)).setRealm(realm).execute(handler)
}

我们当前的实现在方法中做了一个Thread.sleep,但就像我说的那样,这是阻塞的,因此是错误的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-08 06:17:54

使用ScheduledExecutorService。它将允许您计划在将来的某个时间运行。Executors有相当简单的工厂方法来创建它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8036372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档