dlang vibe.d RESTful Сервисное обслуживание

Спасибо за помощь.

Вопрос:
Почему моя служба REST работает так плохо, используя остальные интерфейсы в dlang vibe.d по сравнению с созданием обработчиков запросов вручную?

Дополнительная информация:
Я прототипировал сервис RESTful, используя библиотеку vibe.d в dlang. Я запускаю тест, в котором клиент отправляет запросы GET и POST на сервер с полезной нагрузкой некоторого заданного размера, скажем, 2048 байт (т.е. ответ GET будет иметь 2 КБ, запрос POST будет иметь 2 КБ).

Я пользуюсьregisterRestInterface" а также "RestInterfaceClient"API в библиотеке vibe.d для создания моего сервера и клиента вроде этого...

Сервер:

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);

Я не делаю ничего необычного в своем интерфейсе. Просто заполняя байтовый массив и передавая его. Я знаю, что производительность зависит от многих разных вещей; тем не менее, я вижу скорость передачи около 160 КБ при использовании интерфейсов REST в файле vibe.d и примерно 5 МБ при использовании ручных обработчиков http-запросов, например:

void ManualHandleRequest(HTTPServerRequest req, HTTPServerResponse res) ...  
listenHTTP(settings, &ManualHandleRequest);

Мне действительно нравится интерфейс API REST, но я не могу потерпеть такую ​​потерю производительности, чтобы использовать его. Любые мысли о том, почему это кажется намного медленнее, чем другой метод? Возможно, я что-то настраиваю неправильно или что-то упускаю. Я немного новичок в языке программирования D и в библиотеке vibe.d.

Спасибо за ваше время!

1 ответ

Я подозреваю, что с пользовательским обработчиком запросов вы действительно пишете ответ в виде байтового массива. Генератор интерфейса REST по умолчанию сериализует все возвращаемые данные в JSON, что создает огромные накладные расходы по сравнению с необработанным массивом.

Это всего лишь случайное предположение, хотя мне нужно увидеть фактическую реализацию метода REST, чтобы сказать наверняка и / или предложить решение.

Другие вопросы по тегам