[英]dlang vibe.d RESTful Service Performance
谢谢您的帮助。
题:
与手动创建请求处理程序相比,为什么在dlang vibe.d中使用rest接口时我的REST服务似乎表现不佳?
更多信息:
我一直在使用dlang中的vibe.d库对RESTful服务进行原型设计。 我正在运行一个测试,其中客户端使用给定大小的有效负载(例如2048字节)将客户端发送GET和POST请求发送到服务器(即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方法实现以肯定地说和/或提出解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.