dlang vibe.d RESTful服务性能

时间:2014-12-12 20:41:18

标签: rest d vibed

感谢您的协助。

问题:
与手动创建请求处理程序相比,为什么我的REST服务在dlang vibe.d中使用rest接口表现得如此差劲?

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

我正在使用" registerRestInterface"和" RestInterfaceClient"在vibe.d库中的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库有些新意。

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

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

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