Re[2]: SObjectizer 5.5.19
От: so5team https://stiffstream.com
Дата: 11.05.17 10:56
Оценка: 8 (1)
Здравствуйте, Nuzhny, Вы писали:

N>Здравствуйте, so5team, Вы писали:


N>У меня практический вопрос. В одной программе мне нужен был простенький http server, однопоточный тоже подойдёт. Я взял готовый как раз из boost::asio. Он не такой маленький, как в твоём примере, но я его и не писал — взял готовый.

N>Раз вы приводите такой пример, также используете boost::asio, то было бы неплохо сравнить две реализации. Чем ваш лучше? Лично мне было бы интересно.

Все зависит от критерия, которым сравнивать.

Если ситуация такова, что заранее определена логика того, что нужно отвечать на конкретный запрос, то разница между:
1. взять набор кода из примера asio и изменить в нем обработчик (суть одну функцию);
2. взять набор кода sobjectizer+restinio и изменить в нем тоже только обработчик;
невелика, и зависит не от функциональности sobjectizer+restinio, а скорее от удобства сборки, размером бинарников, скорости компиляции.

Хотя сравнивая уже даже только эти примеры, между ними есть разница. В asio примере запрос обрабатывается синхронно, т.е. получив запрос идет обращение к обработчику, после чего ответ пишется в сокет. Из примера:

request_handler_.handle_request(request_, reply_); // Вызов обработчика.
do_write(); // Ожидается, что ответ уже готов.


А теперь представим, что ответ нельзя получить сразу, например, нужно обратиться к какому-то асинхронному API, и вот тут возможны два основных варианта:
1. обработчик залипает на некоторое время, пока не будут готовы данные для ответа;
2. обработчик должен уметь работать асинхронно: получив запрос, взять его в обработку, и освободить нить исполнения для обработки других соединений и их обработчиков, а когда данные для ответа будут получены надо иметь возможность собрать и отправить ответ.

C примером на asio легко применить первый вариант, а вот второй уже надо будет хорошенько переделывать логику работы класса connection и обработчика. В примере на sobjectizer+restinio второй вариант сразу в наличии и есть. В примере просто продемонстрирован вход к SObjectizer через http, а SObjectizer это асинхронность в полный рост, но это в примере полностью, конечно, не раскрыто.

Еще можно посмотреть на синтаксические отличия. В RESTinio удобнее работать с заголовками и удобнее строить ответ. Еще вопрос на сколько проверенный http-парсер в asioпримере, в RESTinio используется
nodejs/http-parser.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.