感谢您的帮助。
问题:
为什么与手动创建请求处理程序相比,我的 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 方法实现才能确定和/或提出解决方案。