dlang vibe.d RESTful Service Performance



感谢您的帮助。

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

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

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

服务器:

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 库有点陌生。

谢谢你的时间!

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

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

相关内容

  • 没有找到相关文章

最新更新