谢谢您的帮助。
问题:
与手动创建请求处理程序相比,为什么我的 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 库有些陌生。
感谢您的时间!