1

谢谢您的帮助。

问题:
与手动创建请求处理程序相比,为什么我的 REST 服务在 dlang vibe.d 中使用 REST 接口的性能似乎如此糟糕?

更多信息:
我一直在使用 dlang 中的 vibe.d 库对 RESTful 服务进行原型设计。我正在运行一个测试,其中客户端将 GET 和 POST 请求发送到服务器,其有效负载为某个给定大小,例如 2048 字节(即 GET 响应将有 2k,POST 请求将有 2k)。

我正在使用vibe.d 库中的“ registerRestInterface”和“ ”API 来创建我的服务器和客户端,有点像这样......RestInterfaceClient

服务器:

auto routes = new URLRouter;      

registerRestInterface(routes, new ArtifactArchive());

auto settings = new HTTPServerSettings();

settings.port = port;
settings.bindAddresses = [host];
settings.options |= HTTPServerOption.distribute;

listenHTTP(settings, routes);

runEventLoop();

客户:

IArtifactArchive archive = new RestInterfaceClient!IArtifactArchive(endpoint)  
IArtifactArchive.Payload result;  
result = archive.getContents(info.FileDescriptor, offset, info.BlockSize);

我没有在我的界面中做任何花哨的事情。只需填充一个字节数组并传递它。我知道性能取决于许多不同的东西;但是,在 vibe.d 中使用 REST 接口时,我似乎看到了大约 160kB 的传输速率,而在使用像这样的手动 http 请求处理程序时,我看到了大约 5MB 的传输速率:

void ManualHandleRequest(HTTPServerRequest req, HTTPServerResponse res) ...  
listenHTTP(settings, &ManualHandleRequest);

我真的很喜欢 REST 接口 API,但我不能为了使用它而遭受那种性能损失。关于为什么它看起来比其他方法慢得多的任何想法?也许我配置错误或遗漏了一些东西。我对 D 编程语言和 vibe.d 库有些陌生。

感谢您的时间!

4

1 回答 1

2

我怀疑使用自定义请求处理程序,您实际上将响应编写为字节数组。REST 接口生成器默认将所有返回数据序列化为 JSON,与原始数组相比,这会产生巨大的开销。

不过,这只是一个随机猜测,我需要查看实际的 REST 方法实现才能确定和/或提出解决方案。

于 2014-12-22T09:04:01.930 回答