dlang vibe.d RESTful服务性能

dlang vibe.d RESTful服务性能,rest,d,vibed,Rest,D,Vibed,谢谢你的帮助 问题: 与手动创建请求处理程序相比,为什么在dlang vibe.d中使用REST接口时,我的REST服务的性能如此糟糕 更多信息: 我一直在使用dlang中的vibe.d库创建RESTful服务的原型。我正在运行一个测试,其中客户机向服务器发送GET和POST请求,有效负载为给定的大小,比如2048字节(即GET响应为2k,POST请求为2k) 我正在使用vibe.d库中的“registerRestInterface”和“RestInterfaceClient”API创建类似这样

谢谢你的帮助

问题:
与手动创建请求处理程序相比,为什么在dlang vibe.d中使用REST接口时,我的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);
客户端:

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方法实现,才能确定答案和/或提出解决方案。

您可能会在vibe.d github页面上提交一个问题,或者在vibe.d论坛上发布一个问题。如果你得到答复,请发回。谢谢!我在被拒绝的软件论坛上放了一些东西。如果我听到什么,我会发回的。