感谢您的协助。
问题:
与手动创建请求处理程序相比,为什么我的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库有些新意。
感谢您的时间!
答案 0 :(得分:2)
我怀疑使用自定义请求处理程序,您实际上将响应写为字节数组。 REST接口生成器默认将所有返回数据序列化为JSON,与原始数组相比会产生巨大的开销。
这只是随机猜测,我需要看到实际的REST方法实现,以确定和/或提出解决方案。