Здравствуйте, MTD, Вы писали:
MTD>1. Каково ваше позиционирование фреймворка? Какова его ниша? Очевидно там где нужен максимум производительности, там будет голый epoll. В плане скорости разработки есть, например, Go обойти который на С++ мне представляется нереальным и который в сетевой части обеспечит такое же быстродействие как и ваш фреймворк.
Сначала немного о терминах, мы не позиционируем restinio как framework, это именно что библиотека, которая за рамками своей задачи не навязывает пользователю каких-то best practice правил. Так для меня фреймворк это что-то ближе к Poco или ACE, например.
На счет производительности, да, понятно что частное отшлифованное под конкретную задачу решение будет лучше чем созданное с помощью стандартных инструментов, но это если есть такая возможность. Но иногда можно пожертвовать максимальной производительностью, и потратить меньше времени и сил получить просто хорошую производительность.
В каких же случаях. Например, кейс который у нас и случался не раз: есть С++ приложение, которое уже есть как таковое, либо в силу каких-то причин будет разрабатывается на C++, и к нему требуется выставить REST API. То для такой задачи вполне подойдет restinio.
MTD>2. Какой ваш опыт в разработке серверов? Почему вы считаете, что достаточно глубоко понимаете данную специфику чтобы написать фреймворк? Например, бегло посмотрев я не нашел какой механизм вы предлагаете для защиты от медленных клиентов.
Опыт такой: периодически сталкиваемся (раз в год примерно) с задачей организовать REST API для старых C++ных систем или в новой системе REST API закладывается изначально. Мы пробовали разные библиотеки для этого, но в прод чаще всего это оказывался Poco. В первую очередь нам нужна была именно асинхронная обработка запросов (в Poco ее нет). Если заглянуть на более чем пару лет назад, то только restbed давал такую возмоность и был при этом зрелым инструментом, но он платный. Т.о. сами не раз выступали в роли пользователя и прочуствовали что таким пользователям как мы надо. И вот в начале года, когда очередной раз замаячила небходимость прикрутить к одной системе REST API, то мы собрали все требования к либе, с помощью которой это можно было бы сделать, и начали искать. И оказалось, что идеального кандидата не было, а т.к. сколько уже можно "брать что дают", то начали делать свой инструмент для себя исходя из своего опыта как пользователи подобного фрэймворка.
В restinio есть возможность контролировать время выполнения операций с соединением:
Чтение запроса. Например, на получение очередного запроса отводится 5 секунд, тогда соединения который будут присылать на паре байт каждую секунду будут закрываться через 5 секунд.
Запись ответа. Например, на отправку данных отводится 1 секунда, тогда если операция асинхронной записи в сокет не завершится в течении 1 секунду, то такое соединение будет также закрыто.
MTD>3. Смотрели ли вы другие плюсовые фреймворки, например, seafoodplus.info? Чем ваше решение лучше других?
Да смотрели и под список своих хотелок не один не попал. CROW требует определится с ответом сразу в обработчике. Т.е. не получится просто принять запрос, мол да — будем на него отвечать, но попозже, а пока можно продолжить принимать другие запросы и не держать эту нить.