RESTinio -- это header-only, кросс-платформенный инструмент для встраивания HTTP/Websocket в С++ приложение. Он использует standalone версию ASIO Главная задача -- упростить асинхронную обработку запросов. Чтобы, грубо говоря, обработчик спокойно мог потратить 15 секунд на формирование ответа, но это бы не влияло на параллельные запросы.
Библиотека распространяется под BSD-3-CLAUSE лицензией. Мы говорим, что она находится в состоянии beta-версии, т.к. не уверены, что ее API в достаточной степени стабилизировался и не претерпит ломающих изменений в будущем. Но сама реализация достаточно стабильна (например, на RESTinio было сделано одно из решений для Mail.ru-шного HighloadCup-а, которое заняло 41-е место в финале конкурса).
Вот как будет выглядеть простейший http-сервер, который отвечает на все запросы hello-world сообщением:
#include <iostream>
#include <restinio/all.hpp>
int main()
{
restinio::run(
restinio::on_this_thread() // Run server on this thread.
.port(8080)
.address("localhost")
.request_handler([](auto req) {
return req->create_response().set_body("Hello, World!").done();
}));
return 0;
}
В данном примере обработчик запросов предельно прост, но, конечно, RESTinio дает доступ к о всем параметрам запроса, что позволяет делать более сложные обработчики.
Возможности:
Асинхронная обработка запросов. В случаях, когда данные для ответа на запрос не могут быть получены сразу (или почти сразу), то можно сохранить хэндл запроса для дальнейшей обработки (например, в другом контексте исполнения) и вернуться к этому запросу, когда все данные будут готовы. HTTP pipelining. Хорошо работает в связке с асинхронной обработкой запросов.
Контроль за таймаутами. *RESTinio* может помочь в обработке “плохих” соединений, например из которых приходит "GET /", а затем они просто висят.
Построители ответов. Например, если нужно тело chunked-encoding, то в *RESTinio* есть и такой билдер. Поддержка TLS (HTTPS).
Базовая поддержка websocket. При помощи restinio::websocket::basic::upgrade() можно начать websocket сессию используя соединение, в котором был получен исходный upgrade-запрос.
Может быть запущен на стороннем asio::io_context. RESTinio отделен от контекста исполнения, что, например, позволяет запустить 2 сервера используя один asio::io_context или встраивать RESTinio в существующее приложение построенное на ASIO и для этого не потребуется отдельный io_context.
Некоторые настройки для оптимизации. Можно задать дополнительные опции для акцептора и сокета. Если RESTinio работает на пуле, то можно задать чтобы соединения принимались параллельно и/или создание внутренних объектов для работы с соединением создавались отдельно, это позволит быстрее принимать новые соединения.
Здравствуйте, MTD, Вы писали:
MTD>Я уже достаточно конструктивно высказался, можно послушать, а можно обидеться и жаловаться, что пользователь дурак, не оценил души порывов.
Братишка, со стороны выглядит что именно ты обиделся (непонятно на что, кстати) и жалуешься. Начиная прямо с первого твоего сообщения в этой теме. И нет, конструктива от тебя ещё не было.
Re[8]: RESTinio 0.3: header-only C++14 библиотека с HTTP/We
Здравствуйте, MTD, Вы писали:
MTD>Конструктив от меня был с самого первого сообщения — я задал конкретные вопросы, которые задает себе любой разработчик при выборе инструмента. Ответы дали мне понять, что у авторов нет опыта разработки и поддержки серверов которые бы обслуживали самых разных клиентов 7 * 24 * 365. Я ошибаюсь?
непонятно к чему ты вообще вопрос этот задал. Ну т.е. автор прям вот в стартовом сообщении написал, как он позиционирует эту библиотеку
кросс-платформенный инструмент для встраивания HTTP/Websocket в С++ приложение. Он использует standalone версию ASIO Главная задача -- упростить асинхронную обработку запросов
т.е. это альтернатива restbed, cpprestsdk, pion, cppnetlib и ещё доброй дюжины embeddable http-серверов для C++. К чему здесь вопрос о запредельном перформансе и возможности работать 24x7 ( для нагруженных серверов это вообще вопрос к инфраструктуре, а не к коду )?
MTD>Ну покажите мне ссылку, где автор написал, что такой опыт у него есть. Тебя бы это не насторожило?
меня бы это не насторожило, потому что исходя из позиционирования библиотеки и существующих альтернатив меня бы интересовали совершенно другие вопросы, нежели сколько библиотека выдаёт rps по сравнению с голым epoll
MTD>Далее, предложил идею для позиционирования — вылизанный и стабильный nginx принимает соединения, расшифровывает https, а на их фреймворке написан сервер с асинхронными обработчиками и удобным роутингом, на который nginx перенаправляет трафик — вполне себе неплохое вырисовывается решение. Это не конкретика? Ну ок.
идеи о позиционировании не нужны, т.к. позиционирование уже есть и явно озвучено топикстартером в первых же двух предложенях.
Здравствуйте, antropolog, Вы писали:
A>Братишка, со стороны выглядит что именно ты обиделся (непонятно на что, кстати) и жалуешься. Начиная прямо с первого твоего сообщения в этой теме.
Чтобы не съезжать на пустое, допустим я обиделся, ок. Переходим к сути.
A>И нет, конструктива от тебя ещё не было.
Конструктив от меня был с самого первого сообщения — я задал конкретные вопросы, которые задает себе любой разработчик при выборе инструмента. Ответы дали мне понять, что у авторов нет опыта разработки и поддержки серверов которые бы обслуживали самых разных клиентов 7 * 24 * 365. Я ошибаюсь? Ну покажите мне ссылку, где автор написал, что такой опыт у него есть. Тебя бы это не насторожило? Далее, предложил идею для позиционирования — вылизанный и стабильный nginx принимает соединения, расшифровывает https, а на их фреймворке написан сервер с асинхронными обработчиками и удобным роутингом, на который nginx перенаправляет трафик — вполне себе неплохое вырисовывается решение. Это не конкретика? Ну ок.
Re[8]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Конструктив от меня был с самого первого сообщения — я задал конкретные вопросы, которые задает себе любой разработчик при выборе инструмента. Ответы дали мне понять, что у авторов нет опыта разработки и поддержки серверов которые бы обслуживали самых разных клиентов 7 * 24 * 365. Я ошибаюсь? Ну покажите мне ссылку, где автор написал, что такой опыт у него есть. Тебя бы это не насторожило? Далее, предложил идею для позиционирования — вылизанный и стабильный nginx принимает соединения, расшифровывает https, а на их фреймворке написан сервер с асинхронными обработчиками и удобным роутингом, на который nginx перенаправляет трафик — вполне себе неплохое вырисовывается решение. Это не конкретика? Ну ок.
Как раз авторы на РСДН давно и всем известны, их опыт тоже.
Никаких же конкретных вещей про С++ библиотеку, выполняющую указанные функции, тобой сказано не было.
Re[10]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Допускаю, переубедите меня.
Нет смысла. Вот библиотека, с тестами, с примерами, с документацией. Под BSD-лицензией. Нравится -- берете и используете. Не нравится -- ходите по рынку, выбираете что-то другое.
Вы задали вопросы. На те, которые были по делу, вам ответили. Есть еще вопросы по делу -- спрашивайте. Есть что сказать конструктивное -- говорите. А нет, так нет.
MTD>Ответ человека который имеет опыт выглядит так: пишем сервера более 15 лет, например: [идет список со ссылками, коротким описанием, перечислением архитектурных и технических решений, нагрузкой и т.д.]
Пардон май френч, а вы вообще кто? С какого бодуна вам здесь кто-то должен выкладывать подробное резюме и почему вообще кто-то должен на вас тратить свое время?
Никто из нас не работал ни в Google, ни в Facebook-е, ни в Yandex-е. Работали в областях АСУ ТП, телекома и платежных сервисов. Разработанные нами и на наших инструментах компоненты годами работают в режиме 24x7. Например, в декабре 2016-го через SMS-агрегаторы Интервэйла прошел миллиард SMS, половина, т.е. 500 миллионов из них -- через компоненты, которые написаны теми самыми людьми, которые сделали RESTinio. Ну а уж сколько платежных транзакций прошло через шлюз интеграции одного из крупнейших банков с мобильными операторами с 2003-го года по сей момент... И, опять же, в режиме 24x7.
Вы можете достать линейку, все тщательно замерить и заявить, что этого опыта для вас недостаточно. Вот и отлично. Походите по рынку, найдите себе инструмент от более именитых разработчиков.
Ну и по поводу инсинуаций на счет возможной грубости и неадекватности в отношении тех, кто запостит баг-репорты. Найдите баг в RESTinio, придите с баг-репортом, сами увидите.
Re: RESTinio 0.4: header-only C++14 библиотека с HTTP/Websock
Завершены работы над версией 0.4. В ней мы доделали многое из того, что хотели иметь в RESTinio-1.0, и теперь можно рассматривать RESTinio-0.4 как стабильную бета версию. Полный список изменений можно увидеть тут.
Здравствуйте, so5team, Вы писали:
S>Так чего же вам не хватает в продакшене? Вы же сказали, что не хватает, так чего именно?
На многие ответы можно получить ответ, если вежливо интересоваться, а не заявлять, что конкретики 0. Да, даже если и ноль, с людьми надо уметь работать, а если тебе это не приятно и не хочется — ты занялся не тем. Конкретно мне лень сейчас тебе все расписывать — это труд, а тут придется работать даже не за спасибо, а за слабо.
MTD>>Где они? Как называются?
S>В документации об этом написано.
Это тоже хороший сигнал потенциальным пользователям — автору лень дать названия которые он знает, ты должен сам лопатить документацию, при чем это не ты к нему пришел, а он пришел сделать себе рекламу — делает успешно.
S>Ну т.е. список, может быть и существует у вас в голове, но озвучить вы его не можете.
Могу, но не хочу, попросил бы вежливо — получил бы вежливый ответ.
S>ok.jpg
Вы все еще не созрели использовать его фреймворк? Напрасно, смотрите как автор мастерски убеждает.
S>Это вам так показалось. Пока пользы от ваших высказываний ноль целых ноль десятых.
Казалось бы за столько лет человек мог бы задаться вопросом, почему его велосипеды никто не использует, но нет, автор твердо убежден — пользователи не те, с ним же все ок.
Re[4]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Websock с
Здравствуйте, c-smile, Вы писали:
CS>Спасибо, и ещё с autobahn тестировали?
Да, тестировали. При запуске тестов использовался пример websocket_detailed. Из реализованных все кейсы были пройдены (на момент тестирования при прохождении разделов 12.* и 13.* в качестве результата было "Unimplemented").
Re: fir: другая HTTP/WebSocket либа с zero-copy внутри без п
Входной HTTP/1.1 протокол парсится с минимальным кол-вом копирований данных.
Распарсенный HTTP представляет собой просто набор указателей на разные места во входном буфере, куда данные залетели изначально.
Нет привязки к boost или другой сетевой библиотеке, на нижнем уровне лежит класс TCP сервера, реализованный на epoll, но можно подменить что угодно своё с похожим API.
Написано по мотивам внутренностей nginx. Минимум new/delete, всё переиспользуется.
В протоколе WebSocket zero-copy соблюдено плохо, можно оптимизировать.
Здравствуйте, so5team, Вы писали:
S>Простите великодушно. S>Мы приносим извинения за резкий тон в своих предыдущих высказываниях
Ерничать не надо — не красиво.
S>>>Это вам так показалось. Пока пользы от ваших высказываний ноль целых ноль десятых.
S>Вы делаете ошибку предполагая, что у RESTinio всего один автор и предполагая, что общаетесь именно с тем человеком, которого подозреваете в авторстве.
Я такой ошибки не делаю:
Ответы дали мне понять, что у авторов нет опыта разработки и поддержки серверов которые бы обслуживали самых разных клиентов 7 * 24 * 365. Я ошибаюсь?
Но идеолог у всего этого один — если ты это не он, я бы на его месте с тобой не работал, а если это он — еще один велосипед в его копилку. Причем я его блог давно почитываю: CMake плохой, Mxx хороший и т.д., почему пользователи выбирают "плохое" вместо его "хорошего" ему очевидно. Можешь не верить, но я всерьез хотел в одном проекте использовать SObjectizer, прочел все статьи на хабре, написал хелло ворлд, но использовать не стал — я плохой, библиотека хорошая.
Re[11]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Нет смысла. Вот библиотека, с тестами, с примерами, с документацией. Под BSD-лицензией. Нравится -- берете и используете.
Так ты корову не продашь.
S>Не нравится -- ходите по рынку, выбираете что-то другое.
Да, продавать ты не хочешь и не умеешь.
S>Вы задали вопросы. На те, которые были по делу, вам ответили. Есть еще вопросы по делу -- спрашивайте. Есть что сказать конструктивное -- говорите. А нет, так нет.
На самом деле конструктивным был первый ответ, дальше пошли обвинения, что я вопросы неудобные задаю, а дальше вы скатились к оскорблениям — приятно видеть такую работу над имиджем.
MTD>>Ответ человека который имеет опыт выглядит так: пишем сервера более 15 лет, например: [идет список со ссылками, коротким описанием, перечислением архитектурных и технических решений, нагрузкой и т.д.]
S>Пардон май френч, а вы вообще кто? С какого бодуна вам здесь кто-то должен выкладывать подробное резюме и почему вообще кто-то должен на вас тратить свое время?
Я может быть и никто — это вообще не важно, но если вы хотите чтобы ваш фреймворк использовали, то должны убедить людей, что вам можно доверять. Например, что у вас достаточно опыта, чтобы реализовать все правильно.
S>Никто из нас не работал ни в Google, ни в Facebook-е, ни в Yandex-е.
Это не страшно.
S>Работали в областях АСУ ТП, телекома и платежных сервисов. Разработанные нами и на наших инструментах компоненты годами работают в режиме 24x7. Например, в декабре 2016-го через SMS-агрегаторы Интервэйла прошел миллиард SMS, половина, т.е. 500 миллионов из них -- через компоненты, которые написаны теми самыми людьми, которые сделали RESTinio. Ну а уж сколько платежных транзакций прошло через шлюз интеграции одного из крупнейших банков с мобильными операторами с 2003-го года по сей момент... И, опять же, в режиме 24x7.
Это хорошо, что вы где-то работали, а что конкретно вы делали? Поскольку мы обсуждаем http-сервер, то в первую очередь интересует именно это.
S>Вы можете достать линейку, все тщательно замерить и заявить, что этого опыта для вас недостаточно. Вот и отлично. Походите по рынку, найдите себе инструмент от более именитых разработчиков.
Это сделает любой адекватный разработчик. В качестве бесплатного тестировщика работать глупо, особенно когда разработчики такие нервные и неготовые к конструктивному диалогу.
S>Ну и по поводу инсинуаций на счет возможной грубости и неадекватности в отношении тех, кто запостит баг-репорты. Найдите баг в RESTinio, придите с баг-репортом, сами увидите.
Увольте, бесплатно (да и за деньги) тестировать ноунейм библиотеки от ноунейм разработчиков нет ни времени, ни желания.
Re[11]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Сейчас ответ не вам, а просто забавное наблюдение. Троица как за вами ходит, в течении получаса на ваш ответ мне, дружно пришли и выразили одобрямс — внимательно наблюдают за темой. Один наверное с вами работает? Заискивает? А остальные?
Re[12]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>В качестве бесплатного тестировщика работать глупо, особенно когда разработчики такие нервные и неготовые к конструктивному диалогу. MTD>Увольте, бесплатно (да и за деньги) тестировать ноунейм библиотеки от ноунейм разработчиков нет ни времени, ни желания.
Простите, но вас никто даже в качестве бета-тестировщика не рассматривает. Ноунейм, как он есть. Непонятная квалификация. Неспособность задавать вопросы. Неспособность воспринимать ответы. Настолько тонкая душевная организация, что оскорбления вам видятся даже там, где вам просто указывают на отсутствие конструктива. Вы прям наглядная демонстрация актуальности принципа "Никогда не работай с мудаками".
Здравствуйте, so5team, Вы писали:
S>Ну, если оппонент на всех производит одинаковое впечатление... Если оппонент тупит как дебил, а ведет себя как мудак, то что уж поделать.
Был бы ты взрослым человеком, обладающим развитым интеллектом (каким ты себе кажешься), то нашел бы способ не начинать цирк, а напротив грамотно и аргументированно донести свою точку зрения и заслужить уважение. А так вся тема — раскрытие детских комплексов хамоватого разработчика, который несет людям свои велосипеды и требует признания, но всем отчего-то пофиг.
MTD>>А что там сложного?
S>Хотя, действительно, что там сложного.
Снова консенсус. Если у тебя получается сложно, значит скорее всего велосипедишь ты не так.
S>
Каково ваше позиционирование фреймворка? Какова его ниша?
S>И хотя вам все несколько раз объяснили, вы все равно демонстрируете непонимание.
Где непонимание? Есть понимание — ты тешишь свое самолюбие и мечтаешь (уже сколько лет) завоевать мир, получить призвание. Миру как обычно пофиг.
S>Если это не дебилизм, то что, троллинг?
Да хз, что там с твоей стороны. Лучше был бы троллинг, а то совсем грустно.
Re[30]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Был бы ты взрослым человеком, обладающим развитым интеллектом (каким ты себе кажешься), то нашел бы способ не начинать цирк, а напротив грамотно и аргументированно донести свою точку зрения и заслужить уважение. А так вся тема — раскрытие детских комплексов хамоватого разработчика, который несет людям свои велосипеды и требует признания, но всем отчего-то пофиг.
Попытки конструктивного общения с вами предпринимались неоднократно (№1
). Оно продолжалось ровно до тех пор, пока не стало понятно, что вы способны лишь надувать щеки и делать мутные намеки на якобы имеющиеся у вас сакральные знания, а так же истерить изображая из себя оскорбленную невинность. После этого общение с вами перешло в специальный режим, преследующий две основные цели:
a) удерживать тему на плаву, ибо черного PR-а не бывает;
b) наглядно проиллюстрировать потенциальным пользователям ваш же тезис о том, что их ждет, если они придут к нам с баг-репортом. Пусть посмотрят и решат, хотят ли они иметь дело с людьми, которые общаются с вами вот таким вот образом.
MTD>Если у тебя получается сложно, значит скорее всего велосипедишь ты не так.
Если вы чего-то не понимаете, то это вовсе не следствие того, что мы сделали что-то сложно.
MTD>Есть понимание — ты тешишь свое самолюбие и мечтаешь (уже сколько лет) завоевать мир, получить призвание. Миру как обычно пофиг.
Если вы так понимаете ситуацию с разработками нашей команды, то во-первых, вы точно не правы и, во-вторых, у вас какой-то запущенный случай юношеского максимализма. Что еще раз подтверждает диагноз: "малолетний дебил" (с) (На всякий случай, если вы не в курсе, откуда пошел этот мем: "малолетний" в нем означает вовсе не биологический возраст).
Re[37]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Это понятно. Вы этим здесь очень давно занимаетесь. Пользы для RESTinio от этого сколько?
Вам видней, что касается моего мнения — думаю, что никакой, один убыток — во первых, вы вместо того чтобы велосипедить и нарабатывать опыт, со мной сотрясаете воздух, во-вторых, имидж вы себе и своему продукту радикально "улучшили".
S>А покажите пальцем, где именно у кого-то что-то полыхнуло? Ссылку на сообщение, например.
Для тех, кто про RESTinio слышит впервые: это небольшая C++ библиотека для встраивания в C++ приложения HTTP(s)/WebSocket сервера (только сервера, HTTP-клиента в RESTinio нет). Распространяется под лицензией BSD-3-CLAUSE.
Сама библиотека header-only вследствие активного использования шаблонов (в том числе трех- и более этажных), но зависит от библиотек, которые нуждаются в компиляции. В качестве зависимостей используются fmtlib, nodejs/llhttp, expected-lite и Asio (как standalone, так и Boost.Asio).
* теперь нужен C++17;
* теперь используется nodejs/llhttp вместо оставшегося без поддержки nodejs/http-parser;
* переделаны CMake-скрипты. Теперь для конфигурирования используется новый набор CMake-овских опций/переменных.
* добавлена возможность выстраивать цепочки асинхронных обработчиков. В версии 0.6.13 были добавлены цепочки синхронных обработчиков, теперь еще и асинхронные поддерживаются. Цепочки обработчиков -- это что-то вроде middleware из EpressJS;
* выброшены некоторые классы/методы/функции, которые ранее были помечены как deprecated.
MTD>>Ответ есть: "В документации об этом написано." Формально вроде ответили, а фактически послали.
S>Фактически там была дана ссылка на раздел, в котором все описано. Если вы не можете читать документацию... Даже не так: если вы не желаете читать документацию на библиотеку, в обсуждение которой влезли, то не стоит рассчитывать, что вас вообще кто-то хоть как-то будет воспринимать.
у вас там, кстати, с версткой что-то.
На работе глянул, нормально. Дома такая хрень:
Разрешение 1280:1024.
Re: RESTinio 0.3: header-only C++14 библиотека с HTTP/Websock с
Здравствуйте, MTD, Вы писали:
MTD>Здравствуйте, pkl, Вы писали:
pkl>>Входной HTTP/1.1 протокол парсится с минимальным кол-вом копирований данных. pkl>>Распарсенный HTTP представляет собой просто набор указателей на разные места во входном буфере, куда данные залетели изначально. pkl>>Нет привязки к boost или другой сетевой библиотеке, на нижнем уровне лежит класс TCP сервера, реализованный на epoll, но можно подменить что угодно своё с похожим API. pkl>>Написано по мотивам внутренностей nginx. Минимум new/delete, всё переиспользуется.
MTD>Крайне интересно звучит. Какие планы по развитию или чисто just for fun? Обработчики запросов где и как обрабатываются?
Just For Fun конечно, я есть частное лицо, а не организация. Планы могут быть когда ты можешь их гарантировать, а что может гарантировать частное лицо без договора.
Примерные планы — юзать как основное сетевое двигло в своих fun-проектах, дорабатывать по мере надобности, рефакторить как накатит волна.
TCPServerEpoll — это шаблонный класс, куда нужно передать класс фабрики ресурсов. Когда приходит TCP-коннект, то TCPServerEpoll лезет в фабрику ресурсов и говорит "дай объект коннекта для типа 70", где 70 — это то что указал юзер при открытии порта на прослушивание. Объект может быть new или взят из списка свободных (кеш).
Фабрика понимает, что 70 — это HTTP коннект, например. Там их всего несколько типов из коробки, есть например примитивный "bin" протокол для общения демонов между собой. Все коннекты наследуют класс Connection, методы которого eventRead(), eventWrite(), eventClose() и дёргает TCPServerEpoll при соответствующих событиях.
Далее внутри каждого конкретного дочернего типа Connection есть свои eventRead() и т.п. Но общее одно — сам читай из дескриптора данные куда тебе надо.
Преследуя политику минимального копирования данных, TCPServerEpoll не пытается сам читать данные во временные буферы, которые потом отдаёт абстрактному коннекшну. Сделано как в nginx: пускай коннекшн сам решает надо ли ему вообще читать эти данные и пускай сам читает СРАЗУ в тот буфер где они будут нужны и столько сколько нужно, а не занимается копированием из нашего буфера. Поэтому в ConnectionHTTP например, в зависимости от состояния (что мы сейчас пытаемся прочитать — хидеры или BODY) данные читаются в разные буферы и т.п. Вот стартовая процедура чтения данных в ConnectionHTTP https://github.com/pavelkolodin/fir/blob/master/net/connection_http.h#L285 — она читает и разбирает headers.
Есть понятие Responder. Это тип "отвечальщик" — там "хендлеры" и живут ( пример Responder ) Responder передаётся как шаблонный в фабрику. Когда ConnectionHTTP допринимал запрос и понял что запрос нормальный, он говорит фабрике — дай Responder, я буду отвечать! Далее делается что-то типа responder->dataHTTP(this) и ответ отправляется обратно. У Responder должны быть методы dataHTTP, dataWS, dataBin, closeHTTP, closeWS, closeBin иначе не скомпилицца. Это и есть хендлеры. В них тебе дают голые headers, cookies, body и делай с ними что хочешь. Есть там какой-то ответный буфер, туда можно запилить ответ и вернуться, а ConnectionHTTP сам отправит ответ.
ConnectionHTTP на конечных автоматах — данные могут приходить любыми кусочками.
Некоторые штуки не реализованы — например нет поддержки gzip, нет HTTP Range_requests, нет ещё какой-то важной фигни. Зато из коробки есть miltipart/form-data -- можно запощенные HTTP-формочки парсить.
ConnectionWebSocket реализован тоже на конечных автоматах, работает стабильно. В нём есть пара лишних копирований данных (из-за непоняток с вопросами владения буферами). Также в нём отсутствует пара каких-то второстепенных моментов, типа отработки PING\PONG, хотя может и запилено — не помню. В продакшене на http://fintank.ru этот ConnectionWebSocket вроде стабильно работает часами, но я бы над ним ещё поработал.
В целом fir надо немного отрефакторить, там часть написана когда я ещё малолетним дебилом был — под c++14 надо причёсывать, про кеш CPU подумать, lock-free внедрить, мьютексов дурацких повыкидывать если есть...
Здравствуйте, MTD, Вы писали:
MTD>>>Это не совсем то, что требуется в продакшене.
S>>И что же вам требуется в продакшене? И в каком именно продакшене?
MTD>Поэтому я и говорю — не надо велосипедить там, где люди годами опыт нарабатывают — с наскока получится хуже.
Так чего же вам не хватает в продакшене? Вы же сказали, что не хватает, так чего именно?
MTD>>>Во-первых, не понятно откуда такие константы,
S>>Из параметров, задаваемых пользователем.
MTD>Где они? Как называются?
В документации об этом написано.
MTD>>>И это только одна из множества потенциальных проблем,
S>>Огласите весь список, пожалуйста.
MTD>На полноту не претендую, могу сказать только, что даже исходя из своего опыта понимаю, что ваша работа моих скромных требований не удовлетворяет.
Ну т.е. список, может быть и существует у вас в голове, но озвучить вы его не можете. ok.jpg
S>>Спасибо за заботу, но можно ли высказывать свои мысли более конструктивно?
MTD>Я уже достаточно конструктивно высказался
Это вам так показалось. Пока пользы от ваших высказываний ноль целых ноль десятых.
Re[3]: fir: другая HTTP/WebSocket либа с zero-copy внутри без п
S>Библиотека распространяется под BSD-3-CLAUSE лицензией. Мы говорим, что она находится в состоянии beta-версии, т.к. не уверены, что ее API в достаточной степени стабилизировался и не претерпит ломающих изменений в будущем. Но сама реализация достаточно стабильна (например, на RESTinio было сделано одно из решений для Mail.ru-шного HighloadCup-а, которое заняло 41-е место в финале конкурса).
Вот само решение для HighloadCup-а. В принципе, это практически то самое решение, которое было использовано в конкурсе. За двумя небольшими правками:
решение для конкурса работало на промежуточной версии RESTinio, у которой API несколько отличался от API RESTinio-0.3, поэтому опубликованный код был кое-где подправлен, чтобы получилось скомпилироваться с финальной версией RESTinio-0.3;
после того, как финалисты начали делиться секретами производительности, в код решения был добавлен специальный ключик, активирующий busy-waiting на Asio. Это дает некоторый прирост производительности, но то решение, которое заняло 41-е место в финале busy-waiting не использовало.
По поводу самого решения. Использовался самый тривиальный подход с хранением всей информации в памяти. При загрузке json-файлов использовался честный парсинг, данные в ОП хранились уже в C++ном представлении. Результирующие json-оны генерировались на лету при формировании ответа. Поскольку основные затраты были связаны с Asio, то возня с предварительной генерацией ответных json-ов никакого выигрыша не давала.
Изначально для роутинга запросов использовался expressjs-like роутер из RESTinio, но быстро выяснилось, что его реализация на базе std::regex изрядно тормозит и пришлось сделать ручной разбор query_string и ручное определение типа запроса.
Еще для этого конкурса использовался сервер без таймеров:
using traits_t =
restinio::traits_t<
restinio::null_timer_factory_t,
restinio::null_logger_t,
root_req_handler_t >;
using server_t = restinio::http_server_t< traits_t >;
С таймерами на базе Asio результат был бы хуже, т.к. в настоящее время таймеры имеют заметные накладные расходы, в следующей версии RESTinio мы с этим будем отдельно разбираться.
Намедни мы выкатили очередную версию 0.6.6, в которой, среди улучшений и исправлений, следует отметить две новых фичи.
Самая простая из них – это возможность повесить один обработчик сразу для нескольких методов при обращении к одному ресурсу. Например:
// Обработчик будет вызван для методов LOCK и UNLOCK.
router->add_handler(
restinio::router::any_of_methods(
restinio::http_method_lock(), restinio::http_method_unlock()),
"/api/v1/resources/:rid",
[](const auto & req, const auto & params) {...});
// Обработчик будет вызван для всех методов за исключением GET, POST и DELETE.
router->add_handler(
restinio::router::none_of_methods(
restinio::http_method_get(),
restinio::http_method_post(),
restinio::http_method_delete()),
"/api/v1/users/:user",
[](const auto & req, const auto & params) {...});
Но самое важное нововведение – это новый безопасный по типам роутер запросов, который может использоваться вместо привычного express-роутера. При этом новый роутер использует возможности C++ для выявления в compile-time ошибок, которые при использовании express-роутера проявляются только в run-time.
Вышел очередной релиз RESTinio, о котором можно рассказать, потому что в свежей версии 0.6.13 появилось парочка новых и важных фич.
Первая фича -- это возможность провязать несколько обработчиков в цепочку. Какое-то приближение к middleware из EpressJS. При получении нового запроса обработчики из цепочки будут вызываться последовательно. Тем самым каждый обработчик может отвечать только за свою операцию (логирование параметров запроса, проверка значений в HTTP-заголовках, аутентификация и т.д.) и нужная приложению функциональность набирается посредством формирования соответствующей цепочки обработчиков.
Вторая фича, которая очень нужна для вышеупомянутых цепочек, -- это возможность внедрить объект нужного пользователю типа в объект-запрос, который создается внутри RESTinio при получении нового входящего запроса. Такой объект может использоваться для передачи дополнительной информации от одной стадии обработки запроса к другой.
Более подробно все это описано в статье на Хабре. Там же изложены и некоторые соображения о том, куда RESTinio может двигаться дальше.
Так же хочется поблагодарить всех, кто проявил конструктивный интерес к RESTinio и, особенно, тех, кто рискнул и применил RESTinio у себя. Конечно же, отдельное спасибо тем, кто нашел возможность и время поделиться с нами своими впечатлениями, соображениями и обнаруженными недостатками.
Re[2]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, 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. Смотрели ли вы другие плюсовые фреймворки, например, https://github.com/ipkn/crow? Чем ваше решение лучше других?
Да смотрели и под список своих хотелок не один не попал. CROW требует определится с ответом сразу в обработчике. Т.е. не получится просто принять запрос, мол да — будем на него отвечать, но попозже, а пока можно продолжить принимать другие запросы и не держать эту нить.
Re[16]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
MTD>А где там ответ? Два вопроса и два утверждения. Где ответ-то?
По второму кругу, но специально для вас, можно пойти и на это. Итак, сперва вам дали исчерпывающие ответы на ваши вопросы. Далее вы заявили, что "Это не совсем то, что требуется в продакшене." Соответственно, вам тут же задали вопросы чтобы узнать, что вам нужно и какой у вас продакшен. Если вы не понимаете, зачем эти вопросы были заданы, то поясним: мы делали RESTinio исходя из своих соображений о том, как бы мы использовали RESTinio в известных нам условиях. Поэтому нам хочется узнать про условия, которые нам не известны. Но вы держите все в секрете. Сделаем вид, что мы вам поверили.
Далее вы говорите: "Во-первых, не понятно откуда такие константы". И мы вам поясняем, что такие константы задаются пользователем библиотеки. Что, на наш взгляд, полностью проясняет тот факт, что они не захардкожены в коде RESTinio. И что пользователь может задавать собственные значения. Вы удивитесь, но бывает и так, что подобные вещи зашиты в код библиотек и просто так их не изменить.
Далее идет сперва "во-вторых, это все равно не позволит отличить честного пользователя с модемом от злоумышленника.", а затем "И это только одна из множества потенциальных проблем". И тут же мы снова просим вас поделиться знаниями, которыми вы, якобы, обладаете. Но вы вновь все держите в секрете. Мы опять сделаем вид, что вам поверили.
Далее идет то, за что в реальной жизни с человеком либо просто перестают разговаривать, либо дружеским подсрачником возвращают в объективную реальность: "судя по тому, что у вас нет достаточного опыта в этом, предполагается отлаживаться на реальных пользователях, а это годы и репутация." На что мы в мягкой и цензурной форме вам сказали: "Спасибо за заботу, но можно ли высказывать свои мысли более конструктивно?", что следовало бы воспринять как: "Хватит мерятся длиной и давайте разговаривать по существу".
Так что все очень по делу и более чем адекватно. Если вы думаете, что в Интернете вам должны что-то большее, то проблемы с адекватностью вы ищете вовсе не там и не у тех.
S>>И здесь: http://rsdn.org/forum/cpp.applied/6936991.1
MTD>Ответ есть: "В документации об этом написано." Формально вроде ответили, а фактически послали.
Фактически там была дана ссылка на раздел, в котором все описано. Если вы не можете читать документацию... Даже не так: если вы не желаете читать документацию на библиотеку, в обсуждение которой влезли, то не стоит рассчитывать, что вас вообще кто-то хоть как-то будет воспринимать.
S>>Как и здесь: http://rsdn.org/forum/cpp.applied/6937072.1
MTD>А здесь где ответы? Одни вопросы и утверждения.
Вот именно в перечислении ситуаций там и есть ответы. И если вы не способны понять, что именно вам говорят, то попробуйте задать уточняющий вопрос. Вежливо. Возможно, у нас найдется время объяснить то, что вы не понимаете.
S>>И ни одного оскорбления вы там не найдете.
MTD>Да, только хамство, а прямые оскорбления тоже есть, но в других постах.
Т.е. оскорблений, о которых вы так долго говорили, вы сами же и не нашли.
MTD>Я даже больше скажу — каждый и мудак и нет, вот тут мудак, а тут уже нет.
Поддержка Boost::ASIO. Boost::ASIO, начиная с версии 1.66, включает в себя изменения, сделанные ранее в stand-alone версии ASIO, поэтому стало возможным добавить интеграцию с Boost версией ASIO, которую мы собираемся поддерживать и в дальнейшем. Подробнее смотрите в документации.
Добавлена поддержка Boost::Regex в качестве regex engine для express-маршрутизатора.
В интерфейс класса для заголовка запроса добавлены функции доступа к структуре request target: /path, ?request, #fragment. Таким образом, если получен запрос с request target: /weather/temperature?from=2018-01-01&to=2018-01-22#Celsius, то можно получить доступ к /weather/temperature (path), from=2018-01-01&to=2018-01-22 (query) and Celsius (fragment).
Изменения в политике матчинга путей в express-маршрутизаторе. Теперь для матчинга берется только path-часть от исходного request-target. Т.е. для запроса на /weather/temperature?from=2018-01-01&to=2018-01-22 для матчинга будет браться только /weather/temperature (path). Хотя это изменение противоречит оригинальной expressjs, для нас такой подход кажется более естесственным.
Основной репозиторий RESTinio находится на bitbucket (есть github зеркало).
Добавлена концепция преобразователя данных, которая реализована для компрессии/декомпрессии данных с помощью библиотеки zlib. Подробнее смотри: Compression (defalate, gzip).
router->http_get(R"(/port/:id/latest)",
[](auto req, auto params) {
auto resp = req->create_response();
resp.append_header_date_field()
.append_header(restinio::http_field::content_type, "application/json");
restinio::transforms::zlib::gzip_body_appender(resp)
.append(load_port_data(params["id"]))
.complete();
return resp.done();
});
Добавлена функция value_or(), с помощью которой можно получить значение параметра из key-value контейнера RESTinio с подстановкой значения по-умолчанию. Подробне смотри: Get values from RESTinio key-value containers.
Ранее приходилось писать так:
Здравствуйте, Igore, Вы писали:
I>А Boost.Beast не смотрели, можете что нибудь рассказать, про сравнение с этой библиотекой.
По неполиткорректному мнению одного из участников нашей команды, Boost.Beast -- это какая хрень незаслуженно распиаренный и слишком низкоуровневый конструктор, который может быть полезен всего двум категориям пользователей:
разработчикам более высокоуровневых и дружественных пользователю инструментов (такого же уровня, как RESTinio, CROW, Pistache, RestBed и пр.), которые не хотят самостоятельно реализовывать поддержку HTTP-протокола. Мы, например, используем http_parser из Node.js, кто-то может предпочесть Boost.Beast;
разработчикам, которые ради производительности и ресурсоемкости вынуждены работать с HTTP на самом низком уровне, но которые не хотят делать это вручную.
Всем остальным, кому нужно просто добавить HTTP в свой C++ный код и кто не хочет писать простыни кода, лучше держаться от Boost.Beast подальше. Если хотите наглядности в подтверждении этой мысли, то просто поищите пример HelloWorld для Boost.Beast и для RESTinio (или для CROW, RestBed или C++REST SDK). А еще лучше, какой-нибудь пример, который использует что-то вроде Express.js для роутинга запросов. Что-то вроде вот этого примера из нашего README:
#include <restinio/all.hpp>
using namespace restinio;
template<typename T>
std::ostream & operator<<(std::ostream & to, const optional_t<T> & v) {
if(v) to << *v;
return to;
}
int main() {
// Create express router for our service.auto router = std::make_unique<router::express_router_t<>>();
router->http_get(
R"(/data/meter/:meter_id(\d+))",
[](auto req, auto params) {
const auto qp = parse_query(req->header().query());
return req->create_response()
.set_body(
fmt::format("meter_id={} (year={}/mon={}/day={})",
cast_to<int>(params["meter_id"]),
opt_value<int>(qp, "year"),
opt_value<int>(qp, "mon"),
opt_value<int>(qp, "day")))
.done();
});
router->non_matched_request_handler(
[](auto req){
return req->create_response( 404, "Not found").connection_close().done();
});
// Launching a server with custom traits.struct my_server_traits : public default_single_thread_traits_t {
using request_handler_t = restinio::router::express_router_t<>;
};
restinio::run(
restinio::on_this_thread<my_server_traits>()
.address("localhost")
.request_handler(std::move(router)));
return 0;
}
Возможно, тогда станет лучше понятно, что Boost.Beast -- это для мазохистов специфических задач, а RESTinio и ему подобные -- для обычных разработчиков.
Автор Boost.Beast будет делать доклад на CppCon-2018 для которого он подготовил небольшой пример на базе Boost.Beast-а.
Мы, для сравнения выразительности и удобства использования двух библиотек, сделали тот же самый пример, но на базе RESTinio:
Со времени последнего анонса в RESTinio произошли следующие изменения:
* добавлено понятие connection state listener-а. В версии 0.6.0 для connection state listener добавлена возможность получить доступ к параметрам TLS-соединения;
* добавлено понятие IP-blocker-а;
* обновлены зависимости: Asio 1.14.0 (Asio 1.12 так же поддерживается), optional-lite 3.2.0, variant-lite 1.2.2. Добавлена поддержка fmtlib-6.0.0, но сам RESTinio пока использует fmtlib-5.3.0;
* добавлены макросы RESTINIO_VERSION, RESTINIO_VERSION_MAJOR, RESTINIO_VERSION_MINOR, RESTINIO_VERSION_PATCH, RESTINIO_VERSION_MAKE.
Версия 0.6.0 ломает совместимость с версией 0.5 в части API для connection state listener-ов. Поэтому при переходе на 0.6.0 может потребоваться правка кода, использующего RESTinio.
Разработка RESTinio теперь ведется только на GitHub, оттуда же можно забрать свежую версию. RESTinio-0.6.0 так же доступна через Conan и vcpkg.
Можно отметить, что такие вещи, как connection state listener и IP-blocker, изначально не предполагались. Они были добавлены в RESTinio по просьбам пользователей. Так что если вам чего-то не хватает в RESTinio, то дайте нам об этом знать. Либо через Issues на GitHub-е, либо через Google-группу.
Re: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>RESTinio -- это header-only, кросс-платформенный инструмент для встраивания HTTP/Websocket в С++ приложение.
1. Каково ваше позиционирование фреймворка? Какова его ниша? Очевидно там где нужен максимум производительности, там будет голый epoll. В плане скорости разработки есть, например, Go обойти который на С++ мне представляется нереальным и который в сетевой части обеспечит такое же быстродействие как и ваш фреймворк.
2. Какой ваш опыт в разработке серверов? Почему вы считаете, что достаточно глубоко понимаете данную специфику чтобы написать фреймворк? Например, бегло посмотрев я не нашел какой механизм вы предлагаете для защиты от медленных клиентов.
3. Смотрели ли вы другие плюсовые фреймворки, например, https://github.com/ipkn/crow? Чем ваше решение лучше других?
Да.
MTD>Ну покажите мне ссылку, где автор написал, что такой опыт у него есть.
Покажите ссылку, где бы авторы сказали, что у них такого опыта нет.
Ну а если совсем уж сорвать покровы, то мы бросились делать RESTinio прочитав всего половину какой-то книжки по C++ и лишь бегло просмотрев описание HTTP 1.1 в русскоязычной Wikipedia. Мы пытались это старательно скрывать, но на поверку это оказался секрет Полишинеля. Посыпем себе головы пеплом и пойдем убъемся апстену.
MTD>Далее, предложил идею для позиционирования — вылизанный и стабильный nginx принимает соединения, расшифровывает https, а на их фреймворке написан сервер с асинхронными обработчиками и удобным роутингом, на который nginx перенаправляет трафик — вполне себе неплохое вырисовывается решение.
Очевидное решение с использованием reverse proxy. Дальше-то что? Ну вот перенаправил nginx запрос на приложение, что и как приложение должно с этим делать? Ну и какая разница приложению, стоит перед ним reverse proxy или нет?
Ну и это если не брать такую большую тему, как микросервисная архитектура с такими схемами развертывания, когда большинство микросервисов (написанных на разных языках, в том числе и на C++) вообще наружу никуда не смотрит.
И уж совсем не стоит заводить разговор про направление IoT, где могут быть локальные сети умных устройств, требующих взаимодействие по каким-то протоколам поверх HTTP (тот же REST, к примеру). И нет возможности поставить на дохлом умном устройстве еще и nginx для того, чтобы он работал как reverse proxy.
Re[13]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Простите, но вас никто даже в качестве бета-тестировщика не рассматривает.
Ну и отлично! Можем же по некоторым вопросам иметь общее мнение.
S>Ноунейм, как он есть. Непонятная квалификация.
Если это была детская попытка задеть меня, то увы, попробуйте еще.
S>Неспособность задавать вопросы.
Нормальные, адекватные вопросы, если их задать уверенному в себе разработчику библиотеки, то наверняка получишь исчерпывающий ответ.
S>Неспособность воспринимать ответы.
В первом ответе ответы какие-никакие были, а дальше одни обвинения и оскорбления. Я не прав? Ну покажите мне адекватный и исчерпывающий ответ по-существу.
S>Настолько тонкая душевная организация, что оскорбления вам видятся даже там, где вам просто указывают на отсутствие конструктива.
Не надо строить из себя невинную барышню, дибилом вы меня в теме уже назвали (кокетливо зачеркнув, что сути не меняет), а в следующем предложении будет снова оскорбление.
S>принципа "Никогда не работай с мудаками".
Согласен по поводу утверждения, предлагаю дополнить — "и не используйте их велосипеды".
S>Ну а то, что вы в соседнем ответе
Здравствуйте, rameel, Вы писали:
R>А ты забавный Влетел в тему как паровоз в толпу
Толпа состояла из so5team, потом конечно набежали "а мы пойдем на север".
R>конструктива с твоей стороны ноль целых ноль десятых, только одни нападки и обвинения
Что характерно когда просишь быть конкретней и показать пальцем, то отчего-то игнор.
R>одни у тебя неучи и недоросли
Это ты врешь, ну или покажи где я такое утверждал. Я просто поинтересовался у разработчика библиотеки его опытом в данной области — какой страшный грех.
R>другие — заискиватели. Молодец! Так держать!
Ну ты же пол дня мониторишь тему чтобы выразить одобрямс? Это просто факт. Почему ты так делаешь я не знаю, может быть заискиваешь, а может я тебе чем-то не нравлюсь — это не проблема, я переживу.
R>ЗЫЫ. Шапочку из фольги поправьте, а то кругом враги, ужас-ужас!
Ты что-то путаешь, у меня кругом друзья и сам я очень дружелюбный, хороший парень.
Re[15]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, rameel, Вы писали:
MTD>>Что характерно когда просишь быть конкретней и показать пальцем, то отчего-то игнор.
R>Тебе указали уже несколько раз, ну а по поводу игнора, то попробуй общаться нормально, тогда и ответы будут
Игнор по той причине, что когда вас просят конкретику — ответить нечем, так как все на эмоциях и отношения к тому что я писал имеет отдаленное.
R>>>одни у тебя неучи и недоросли
MTD>>Это ты врешь, ну или покажи где я такое утверждал.
R>Просто перечитай свои ответы
Я вообще не удивлен, что ты соврал. Вот такой ты врунишка.
MTD>>Я просто поинтересовался у разработчика библиотеки его опытом в данной области — какой страшный грех.
R>Ты не интересовался, ты сразу в наступление перешел.
Это твоя эмоциональная оценка. Вопрос был нейтрален:
2. Какой ваш опыт в разработке серверов? Почему вы считаете, что достаточно глубоко понимаете данную специфику чтобы написать фреймворк?
Сформулируй этот вопрос более нейтрально, покажи как надо.
Re[19]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Вы опять не правы.
Про это мы уже говорили, есть люди которые всегда уверены в своей правоте, все другие для них, если думают иначе — неправы.
S>Речь о том, что если вы приходите в тему без конструктива, то пользы от вас ноль.
Конструктив был, только отчего-то у вас сразу бомбануло из-за того, что я не стал нахваливать ваш фреймворк, а стал задавать вопросы.
S>Если в ответ на эти слова вы начинаете себя вести как оскорбленная институтка, то ничего не остается, как начать называть вещи своими именами.
Вообще-то как ребенок ведете себя вы — не стал я вас гладить по голове и все — слезы, сопли, обиды.
S>Так что давайте без обиняков: если вам есть что сказать по делу, то говорите.
Я уже сказал, если хотите продолжения ответьте исчерпывающе на мои вопросы.
S>Если вы не хотите общаться предметно и конструктивно, то вы, очевидно, тролль-пустозвон и, с большой долей вероятности, "малолетний дебил" (c) Вам выбирать кем быть.
Я же говорю — обиженный ребенок.
S>Ну и да, на вопрос про опыт вам был дан ответ
Здравствуйте, so5team, Вы писали:
S>На кону мочало, начинаем все с начала. Не было конструктива.
Был.
S>Даже ваши сентенции по поводу предполагаемого nginx-а в качестве предшествующего reverse proxy, совершенно не по делу, поскольку наличие или отсутствие перед приложением с RESTinio внутри ничего не меняет в позиционировании и целях RESTinio.
Конечно меняет, nginx серьезный отлаженный продукт созданный опытными людьми, там уже 100 раз обошли все грабли, про которые вы пока даже не в курсе.
S>На ваши вопросы были даны ответы.
Не было.
S>вы всегда можете вежливо переспросить и уточнить.
Я с самого начала так и поступал, но у вас бомбануло, началась истерика, хамство, оскорбления, что напрочь отбило желание общаться конструктивно, теперь так прихожу понаблюдать за корчами — забавно.
Re[27]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
MTD>>Тут либо у Евгения ко всему прочему еще и раздвоение личности, либо Евгению, если он не хочет чтобы о нем думали как о неуравновешенном хаме с детскими комплексами, то не надо давать писать непонятно кому.
S>Просто смиритесь с тем, что из под so5team пишет несколько человек, в зависимости от того, в чьей зоне ответственности находится вопрос. Поэтому пытаясь плюнуть в одного конкретного человека, который, как вам кажется, сейчас с вами общается, вы рискуете попасть совершенно в другого.
Типа если надо оппонета дебилом назвать — это зона ответственности одного, а если мудаком — то другого? Да вы там упоролись
S>Остается надеяться, что сей простой факт вы сможете понять, в отличии от более сложных вещей, таких как цели и задачи RESTinio.
А что там сложного? Взять готовые либы и написать некоторое количество оберток — курсовой проект в вузе.
Re[29]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>что резкость в высказываниях
Где резкость? Жалобы, нытье, хамство, оскорбления — это не резкость.
S>В одном случае Вы занимаетесь деятельностью, не делая никаких выводов о результатах этой деятельности, в другом случае Вы предоставляете информацию, не подкрепленную никаким опытом или фактами.
Кстати, четкое определение того, чем вы занимаетесь уже который год.
S>Безусловно, у нас мог бы получиться конструктивный диалог
Да, достаточно не хамить, если не нравится ответ и люди потянутся.
S>Мы обязательно сделаем выводы и постараемся в следующий раз более взвешенно отвечать на Ваши вопросы, если конечно же Вы не потеряете интерес к нашей разработке.
Вот это уже слова взрослого человека, осталось сделать второй шаг и извиниться.
Re[10]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Есть мнение, что у вашего решения требования гораздо выше, чем у nginx. Ну и то, что на какой-то железке не будет С++ компилятора который умеет С++11 я прям уверен на 95% — снова ошибка позиционирования.
Скажите, а почему вы постоянно суёте этот ваш бжынн.... джын... дрын-дрын-дрын... о, проперделся наконец-то, завёлся, этот ваш nginx джинкающий? Почему не apache httpd, не g-wan?
Мне в демон на яве написанный, с http-интерфейсом — тоже джын-джынкс запихивать? Как у него с работой на виндах, Сысоев и по сей день не осилил IOCP использовать?
Кстати говоря, в системах, работающих 24*7*365, обычно никаких nginx'ов не бывает, они там разве что от бедности заводятся.
Re[31]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Завязывайте заливать — слово конструктивный вы трактуете по своему. Нравится ответ — конструктивный, не нравится — не конструктивный.
S>делать мутные намеки на якобы имеющиеся у вас сакральные знания
Не надо врать, намеков никаких я не делал — сразу сказал, что опыта у меня мало:
Поэтому я и говорю — не надо велосипедить там, где люди годами опыт нарабатывают — с наскока получится хуже. Сначала, хотел написать развернутый ответ, потом подумал, что у меня тоже опыта маловато, поэтому либо наймите тех людей, кто уже все знает, либо годами набивайте свои шишки, тренироваться на кошках пользователях, как-то не очень правильно.
Кстати, вам тоже лучше было бы не напускать тумана и важно надувать щеки, а сразу сказать, что опыта в сетевом программировании мало, но есть большой опыт в других областях и сильное желание — это было бы честно и правильно.
S>а так же истерить изображая из себя оскорбленную невинность
Вы уже рассказали, что то ли вас там много, то ли личности в голове одного переключаются — это заметно, сначала выходит быдло и оскорбляет собеседника, потом подключается овечка и вопрошает, а где оскорбления.
S>a) удерживать тему на плаву, ибо черного PR-а не бывает;
Отлично, работаем дальше.
S>b) наглядно проиллюстрировать потенциальным пользователям ваш же тезис о том, что их ждет, если они придут к нам с баг-репортом.
Что же — это честно, пусть иллюзий не питают связываясь с вашими разработками. Жму руку.
S>Если вы чего-то не понимаете, то это вовсе не следствие того, что мы сделали что-то сложно.
Я даже не смотрел. Что у вас за мания величия, будто все только и жаждут покопаться в том, что вы там произвели в муках.
MTD>>Есть понимание — ты тешишь свое самолюбие и мечтаешь (уже сколько лет) завоевать мир, получить призвание. Миру как обычно пофиг.
S>Если вы так понимаете ситуацию с разработками нашей команды, то во-первых, вы точно не правы
Ладно мне вы врете, но самому себе не надо.
S>у вас какой-то запущенный случай юношеского максимализма.
Так это же у вас, но даже не юношеского, а детского — кто меня не хвалит, тот дурак.
S>Что еще раз подтверждает диагноз: "малолетний дебил" (с)
Ну-ну.
Re[35]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
MTD>>Трактовать слово по своему или заливать? Нет, не имеете. Трактовать слова не надо — для этого словари есть, заливать тоже взрослому человеку не красиво.
S>Еще раз: мы, как разработчики презентуемой библиотеки, имеем право оценивать полезность ваших слов для дальнейшего развития библиотеке. Имеем полное право.
Имеете, а врать и переиначивать слова — нет. А еще я имею право высказать, что я думаю.
S>Мы даем оценку тому, что вы говорите. Мы.
Больше мы, больше. Что, Евгений, начинает подгорать как вчера? Это хорошо. Я тоже даю вам оценку. Я.
S>С эпическим сливом:
Да, зачетно вы слились со своим мега-опытом, который есть, но которого нет.
S>не несет для RESTinio никакой полезной информации, о чем вам уже неоднократно сообщали.
Несет, просто вы это понять не хотите. Ну и ездите на своих велосипедах самостоятельно. За столько лет так и не научится ни чему — талант.
S>Т.е. вы полезли "с конструктивом" в тему, с которой даже не соизволили ознакомиться.
На той стадии я просто задал вопросы о продукте про который ничего не знаю, если бы я заинтересовался полез бы смотреть, но после того, как у вас полыхнуло факелом, понял — очередное творение непризнанного гения.
MTD>> но у вас так пригорело, что вместо того чтобы вежливо попросить пояснить, вы устроили цирк.
S>Да пока что горит разве что у вас.
Не волнуйтесь, горит, горит, уже легче?
Re[2]: v.0.5.0: возможность работы с кастомными версиями http-parser
Здравствуйте, so5team, Вы писали:
S>Да вы своим ослоумием и "полезными" комментариями здесь резко выделяетесь, так что продолжайте. Публике нужны развлечения.
А что ты так завелся? Ты же искал своей поделке внимание — ну так вот оно, что не так? кстати, интересно за "ослоумие" тебя забанят или ты и есть специальный шут, которому позволительно хамить?
Re[6]: v.0.5.0: возможность работы с кастомными версиями http-parser
Здравствуйте, so5team, Вы писали:
S>В restinio есть возможность контролировать время выполнения операций с соединением:
S>
S> Чтение запроса. Например, на получение очередного запроса отводится 5 секунд, тогда соединения который будут присылать на паре байт каждую секунду будут закрываться через 5 секунд. S> Запись ответа. Например, на отправку данных отводится 1 секунда, тогда если операция асинхронной записи в сокет не завершится в течении 1 секунду, то такое соединение будет также закрыто. S>
Это не совсем то, что требуется в продакшене. Во-первых, не понятно откуда такие константы, во-вторых, это все равно не позволит отличить честного пользователя с модемом от злоумышленника. И это только одна из множества потенциальных проблем, судя по тому, что у вас нет достаточного опыта в этом, предполагается отлаживаться на реальных пользователях, а это годы и репутация. Почему бы просто не взять nginx — отлаженный сервер, который уже умеет все что нужно и делает это хорошо, надо только написать конфигурацию. Далее, пусть он сам работает с https, защищает от всяких нежданчиков и перенаправляет http трафик на нужный порт, а там уже пусть будет ваш сервер. В принципе удобный роутинг с асинхронными обработчиками — good enough, тут я вижу место для вашего фреймворка (я все-таки уверен, что это фреймворк, так как навязывает определенные правила).
Re[4]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Это не совсем то, что требуется в продакшене.
И что же вам требуется в продакшене? И в каком именно продакшене?
MTD>Во-первых, не понятно откуда такие константы,
Из параметров, задаваемых пользователем.
MTD>во-вторых, это все равно не позволит отличить честного пользователя с модемом от злоумышленника.
Подскажите нужный вам способ.
MTD>И это только одна из множества потенциальных проблем,
Огласите весь список, пожалуйста.
MTD>судя по тому, что у вас нет достаточного опыта в этом, предполагается отлаживаться на реальных пользователях, а это годы и репутация.
Спасибо за заботу, но можно ли высказывать свои мысли более конструктивно?
Re[5]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
MTD>>Это не совсем то, что требуется в продакшене.
S>И что же вам требуется в продакшене? И в каком именно продакшене?
Поэтому я и говорю — не надо велосипедить там, где люди годами опыт нарабатывают — с наскока получится хуже. Сначала, хотел написать развернутый ответ, потом подумал, что у меня тоже опыта маловато, поэтому либо наймите тех людей, кто уже все знает, либо годами набивайте свои шишки, тренироваться на кошках пользователях, как-то не очень правильно.
MTD>>Во-первых, не понятно откуда такие константы,
S>Из параметров, задаваемых пользователем.
Где они? Как называются?
MTD>>И это только одна из множества потенциальных проблем,
S>Огласите весь список, пожалуйста.
На полноту не претендую, могу сказать только, что даже исходя из своего опыта понимаю, что ваша работа моих скромных требований не удовлетворяет.
MTD>>судя по тому, что у вас нет достаточного опыта в этом, предполагается отлаживаться на реальных пользователях, а это годы и репутация.
S>Спасибо за заботу, но можно ли высказывать свои мысли более конструктивно?
Я уже достаточно конструктивно высказался, можно послушать, а можно обидеться и жаловаться, что пользователь дурак, не оценил души порывов.
Re[7]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
MTD>>Я уже достаточно конструктивно высказался
S>Это вам так показалось. Пока пользы от ваших высказываний ноль целых ноль десятых.
забей. только время потеряешь
Re[8]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
S>>Так чего же вам не хватает в продакшене? Вы же сказали, что не хватает, так чего именно?
MTD>На многие ответы можно получить ответ, если вежливо интересоваться
Простите великодушно. Можем ли мы вас попросить описать, какие требования к HTTP/Websocket серверам вы предъявляете для использования в своем продакшен окружении? Опишите, пожалуйста, если сможете найти время и уделить внимание нашей скромной просьбе.
S>>Ну т.е. список, может быть и существует у вас в голове, но озвучить вы его не можете.
MTD>Могу, но не хочу, попросил бы вежливо — получил бы вежливый ответ.
Пожалуйста, огласите свой список. Мы приносим извинения за резкий тон в своих предыдущих высказываниях и просим принять во внимание тот факт, что данный список может быть интересен не только разработчикам RESTinio.
S>>Это вам так показалось. Пока пользы от ваших высказываний ноль целых ноль десятых.
MTD>Казалось бы за столько лет человек мог бы задаться вопросом, почему его велосипеды никто не использует, но нет, автор твердо убежден — пользователи не те, с ним же все ок.
Вы делаете ошибку предполагая, что у RESTinio всего один автор и предполагая, что общаетесь именно с тем человеком, которого подозреваете в авторстве.
Re[9]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, Nuzhny, Вы писали:
N>Как раз авторы на РСДН давно и всем известны, их опыт тоже.
Мне тоже, я даже его блог временами читаю. Но чисто для понимания простой пример — специалист по криптографии, не факт, что шарит в 3Д. Еще раз — если я ошибаюсь и у авторов обширный опыт написания и поддержки серверов, которые работают 7*24*365 обслуживая самых разных клиентов, пусть покажет или хотя бы подтвердит, что такой опыт есть.
N>Никаких же конкретных вещей про С++ библиотеку, выполняющую указанные функции, тобой сказано не было.
Каких конкретных? Названия методов пообсуждать? Я спросил для примера как они с медленными клиентами предлагают работать. Вопрос конкретный?
Re[9]: RESTinio 0.3: header-only C++14 библиотека с HTTP/We
Здравствуйте, antropolog, Вы писали:
A>непонятно к чему ты вообще вопрос этот задал.
Вопросы задают чтобы получить ответ, мне было не понятно, я уточнил — получил обвинения в неконструктиве. Простите, даже не знаю какие реверансы делать, чтобы не задеть ничьих чувств.
A>т.е. это альтернатива restbed, cpprestsdk, pion, cppnetlib и ещё доброй дюжины embeddable http-серверов для C++.
И почему надо выбрать его?
A>К чему здесь вопрос о запредельном перформансе и
А где такой вопрос? Ткни пальцем, а то ощущение, что ты не мои посты комментируешь. Про турнир хай лоад, не я писал, а автор.
A>возможности работать 24x7
Мне не нравится, когда на меня тикеты заводят, хочу чтобы работало стабильно. Удивительно, да?
A>а не к коду )?
Ага, ошибки в коде и отсутствие поддержки нештатных ситуаций ни на что не влияют, ага.
MTD>>Ну покажите мне ссылку, где автор написал, что такой опыт у него есть. Тебя бы это не насторожило?
A>меня бы это не насторожило, потому что исходя из позиционирования библиотеки и существующих альтернатив меня бы интересовали совершенно другие вопросы,
А я если выбираю инструмент, то рассчитываю, что его писал человек который на этом собаку съел, а следовательно по определению сделает хорошо и точно лучше, чем я. Так, например, я не стал бы пользоваться криптобиблиотекой, если у автора нет лет 20 за плечами в этой области.
A>нежели сколько библиотека выдаёт rps по сравнению с голым epoll
Это твой тезис, не надо мне приписывать то, что я не говорил.
A>идеи о позиционировании не нужны
Ну тогда и удивляться нечему, что велосипеды пылятся.
Re[10]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Ерничать не надо — не красиво.
В сухом остатке: у вас есть какой-то список хотелок и требований, но вы их не озвучите.
Ok. Мы сделаем вид, что не считаем вас дебиломтроллем-пустозвоном, что вы просто человек с тонкой душевной ориентацией, который не хочет на профильном ресурсе делиться своим опытом с коллегами из-за нанесенных вам оскорблений с нашей стороны. За оскорбления приносим свои извинения, это получилось случайно.
Спасибо за потраченное время, ваш фидбэк оказался бесполезным, как пользователь вы нам не интересны.
Re[9]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
MTD>>Я ошибаюсь?
S>Да.
Допускаю, переубедите меня.
MTD>>Ну покажите мне ссылку, где автор написал, что такой опыт у него есть.
S>Покажите ссылку, где бы авторы сказали, что у них такого опыта нет.
2. Какой ваш опыт в разработке серверов? Почему вы считаете, что достаточно глубоко понимаете данную специфику чтобы написать фреймворк?
Опыт такой: периодически сталкиваемся (раз в год примерно) с задачей организовать REST API для старых C++ных систем или в новой системе REST API закладывается изначально. Мы пробовали разные библиотеки для этого, но в прод чаще всего это оказывался Poco.
Ответ человека который имеет опыт выглядит так: пишем сервера более 15 лет, например: [идет список со ссылками, коротким описанием, перечислением архитектурных и технических решений, нагрузкой и т.д.]
S>Ну а если совсем уж сорвать покровы, то мы бросились делать RESTinio прочитав всего половину какой-то книжки по C++ и лишь бегло просмотрев описание HTTP 1.1 в русскоязычной Wikipedia.
Пока что у меня сложилось именно такое впечатление.
S>Мы пытались это старательно скрывать, но на поверку это оказался секрет Полишинеля. Посыпем себе головы пеплом и пойдем убъемся апстену.
Ерничать не красиво, если есть что сказать — можно просто дать конкретику, а это несерьезно, для человека который предлагает людям завязаться в своем коде на его решение.
S>Очевидное решение с использованием reverse proxy. Дальше-то что? Ну вот перенаправил nginx запрос на приложение, что и как приложение должно с этим делать?
Я же написал, тут простое решение с асинхронными обработчиками и удобным роутингом засияет.
S>Ну и какая разница приложению, стоит перед ним reverse proxy или нет?
Огромная. nginx написан людьми с большим опытом, там убраны все те грабли по которым вам только предстоит пройти.
S>И уж совсем не стоит заводить разговор про направление IoT, где могут быть локальные сети умных устройств, требующих взаимодействие по каким-то протоколам поверх HTTP (тот же REST, к примеру). И нет возможности поставить на дохлом умном устройстве еще и nginx для того, чтобы он работал как reverse proxy.
Есть мнение, что у вашего решения требования гораздо выше, чем у nginx. Ну и то, что на какой-то железке не будет С++ компилятора который умеет С++11 я прям уверен на 95% — снова ошибка позиционирования.
Re[11]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>В сухом остатке: у вас есть какой-то список хотелок и требований, но вы их не озвучите.
В сухом остатке: кто-то не имею опыта в предметной области написал непонятно что, зачем это использовать он и сам не знает.
S>Ok. Мы сделаем вид, что не считаем вас дебиломтроллем-пустозвоном, что вы просто человек с тонкой душевной ориентацией, который не хочет на профильном ресурсе делиться своим опытом с коллегами из-за нанесенных вам оскорблений с нашей стороны. За оскорбления приносим свои извинения, это получилось случайно.
Ок. Предлагаю посмотреть на свою коллекцию никому не нужных велосипедов (кроме Интервейла, да и ему не нужен, просто так исторически вышло), а потом подумать кем вы по сути являетесь.
Кстати, потенциальным пользователям предлагаю посмотреть, как вероятно будет выглядеть ответ на ваш баг репорт.
S>Спасибо за потраченное время, ваш фидбэк оказался бесполезным, как пользователь вы нам не интересны.
Фух, пронесло.
Re[12]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Кстати, потенциальным пользователям предлагаю посмотреть, как вероятно будет выглядеть ответ на ваш баг репорт.
Пример реакции на баг-репорт можно посмотреть вот в этих комментариях ну и сделать свои выводы об адекватности поведения авторов библиотек. Ну или вот еще.
Re[13]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
MTD>>Кстати, потенциальным пользователям предлагаю посмотреть, как вероятно будет выглядеть ответ на ваш баг репорт.
S>Пример реакции на баг-репорт можно посмотреть вот в этих комментариях ну и сделать свои выводы об адекватности поведения авторов библиотек. Ну или вот еще.
То есть за столько лет пару раз вы были в духе, чтобы ответить нормально? Как-то тревожно.
Re[12]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Сейчас ответ не вам, а просто забавное наблюдение. Троица как за вами ходит, в течении получаса на ваш ответ мне, дружно пришли и выразили одобрямс — внимательно наблюдают за темой. Один наверное с вами работает? Заискивает? А остальные?
А ты забавный Влетел в тему как паровоз в толпу, конструктива с твоей стороны ноль целых ноль десятых, только одни нападки и обвинения: одни у тебя неучи и недоросли, другие — заискиватели. Молодец! Так держать!
ЗЫ. У всех троих "заискивателей" как ты выразился, всего по одному плюсу за всю тему so5team и оценке на стартовое сообщение.
ЗЫЫ. Шапочку из фольги поправьте, а то кругом враги, ужас-ужас!
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Re[14]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Мы же, в свою очередь, вообще нигде не смогли найти конструктива и конкретики с вашей стороны.
MTD>Согласен по поводу утверждения, предлагаю дополнить — "и не используйте их велосипеды".
Да, велосипеды мудаков лучше не использовать. Они их, кстати, и не делают.
Re[15]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Неспособность воспринимать ответы.
MTD>>В первом ответе ответы какие-никакие были, а дальше одни обвинения и оскорбления. Я не прав?
S>Не правы.
MTD>>Ну покажите мне адекватный и исчерпывающий ответ по-существу.
S>Вот здесь все по существу: http://rsdn.org/forum/cpp.applied/6936956.1
А здесь где ответы? Одни вопросы и утверждения.
S>И ни одного оскорбления вы там не найдете.
Да, только хамство, а прямые оскорбления тоже есть, но в других постах. В принципе, мне на эти ужимки все равно — не барышня, но белого и пушистого строить поздно.
S>Да, велосипеды мудаков лучше не использовать.
И снова консенсус — это радует.
S>Они их, кстати, и не делают.
Ой, да ладно. Все делают. Я даже больше скажу — каждый и мудак и нет, вот тут мудак, а тут уже нет.
Re[14]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Что характерно когда просишь быть конкретней и показать пальцем, то отчего-то игнор.
Тебе указали уже несколько раз, ну а по поводу игнора, то попробуй общаться нормально, тогда и ответы будут
R>>одни у тебя неучи и недоросли
MTD>Это ты врешь, ну или покажи где я такое утверждал.
Просто перечитай свои ответы
MTD>Я просто поинтересовался у разработчика библиотеки его опытом в данной области — какой страшный грех.
Ты не интересовался, ты сразу в наступление перешел.
R>>другие — заискиватели. Молодец! Так держать!
MTD>Ну ты же пол дня мониторишь тему чтобы выразить одобрямс? Это просто факт.
А что мне ее мониторить, у меня ридер есть, советую.
MTD>Почему ты так делаешь я не знаю, может быть заискиваешь, а может я тебе чем-то не нравлюсь — это не проблема, я переживу.
Тебе не приходит в голову, что кто-то может быть просто солидарен с кем-то в некотором вопросе? Или согласиться это уже заискивание?! Вот это поворот! (с)
В общем, жирно товаришь, очень жирно, что аж капает!
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Re[17]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Если вы думаете, что в Интернете вам должны что-то большее, то проблемы с адекватностью вы ищете вовсе не там и не у тех.
Я как раз ничего не жду, это у вас, как у меня сложилось мнение подход "я написал очередной велосипед, кто не хвалит тот плохой".
S>Т.е. оскорблений, о которых вы так долго говорили, вы сами же и не нашли.
Ну это уже верх то ли неадекватности, то ли такой непробиваемой наглости, типа все забыли, буду гнуть свое. Вот полюбуйтесь на свою культуру общения:
Мы сделаем вид, что не считаем вас дебиломтроллем-пустозвоном, что вы просто человек с тонкой душевной ориентацией
Вы прям наглядная демонстрация актуальности принципа "Никогда не работай с мудаками".
MTD>>Я даже больше скажу — каждый и мудак и нет, вот тут мудак, а тут уже нет.
S>Ну вам виднее, кто вы, где и когда.
Снова опустились до детских дразнилок. В принципе, да, есть такие люди нетерпимые к чужому мнению, типа меня мама хвалила, я запомнил, что я молодец, а вы дураки. Достаточно вспомнить вашу мега-обиду на других участников форума, после чего вы несколько лет писали только у себя в бложике, иногда сочиняя посты в стиле: "Смотрите какие на РСДН дураки".
Re[18]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, night beast, Вы писали:
NB>у вас там, кстати, с версткой что-то. NB>На работе глянул, нормально. Дома такая хрень: NB>Image: Screen.jpg
NB>Разрешение 1280:1024.
Ok. Видимо, BitBucket так себя ведет на небольших дисплеях. Учтем. Вероятно, придется описывать параметры без использования таблиц.
Спасибо за репорт.
Re[18]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Я как раз ничего не жду, это у вас, как у меня сложилось мнение подход "я написал очередной велосипед, кто не хвалит тот плохой".
Вы опять не правы. Речь о том, что если вы приходите в тему без конструктива, то пользы от вас ноль. Если в ответ на эти слова вы начинаете себя вести как оскорбленная институтка, то ничего не остается, как начать называть вещи своими именами.
Так что давайте без обиняков: если вам есть что сказать по делу, то говорите. Например, ответьте на вопросы, заданные вам здесь: http://rsdn.org/forum/cpp.applied/6936956.1
Если вы не хотите общаться предметно и конструктивно, то вы, очевидно, тролль-пустозвон и, с большой долей вероятности, "малолетний дебил" (c) Вам выбирать кем быть.
. Другого не будет. Здесь не опыт обсуждается, а библиотека с открытым кодом, с примерами, с тестами, с документацией. На вопросы по библиотеке будем отвечать. На отвлеченные, вроде размера опыта или цвета трусов -- нет.
Re: RESTinio 0.3: header-only C++14 библиотека с HTTP/Websock с
Здравствуйте, c-smile, Вы писали:
CS>Что означает "basic support of websockets", слово basic в частности?
Basic означает, что RESTinio делает только базовые манипуляции с Websocket-фреймами. Т.е. принимает входящий фрейм, проверяет его корректность и, если фрейм корректен, то фрейм отдается пользователю для обработки. При этом на плечах пользователя остаются следующие задачи:
обнаружение входящего запроса с заголовком upgrade для того и вызов restinio::websocket::basic::upgrade;
обработка таких фреймов, как ping и pong. И, соответственно, самостоятельный контроль за тем, когда нужно отослать ping;
склейка continuation-фреймов в единое целое (restinio::websocket::basic это сам не делает);
ручное закрытие всех созданных websocket-ов при завершении работы сервера.
Так же restinio::websocket::basic делает только минимально необходимые операции с исходящими фреймами.
В последующих версиях мы хотим сделать еще и restinio::websocket::easy, в котором пользователю будут доставляться только текстовые и бинарные фреймы, а ping-и и pong-и будет обрабатывать сам restinio. Так же хотим, чтобы в restinio::websocket::easy пользователь просто указывал URL-ы, на которых он ждет обращения по websocket-ам, а upgrade выполнял бы сам RESTinio. Ну и в easy-реализации RESTinio мог бы сам глушить все открытые websocket-ы при завершении работы сервера.
При этом пользователю будут доступны и restinio::websocket::basic, и restinio::websocket::easy.
По остальным вопросам ответим позже.
Re[20]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
На кону мочало, начинаем все с начала. Не было конструктива.
Даже ваши сентенции по поводу предполагаемого nginx-а в качестве предшествующего reverse proxy, совершенно не по делу, поскольку наличие или отсутствие перед приложением с RESTinio внутри ничего не меняет в позиционировании и целях RESTinio.
MTD>Я уже сказал, если хотите продолжения ответьте исчерпывающе на мои вопросы.
На ваши вопросы были даны ответы. Если вы что-то в ответах не поняли и/или не увидели, то a) это ваши проблемы и b) вы всегда можете вежливо переспросить и уточнить.
Re[22]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Да, вы "малолетний дебил" (с). Вот и весь конструктивный итог общения с вами в данной теме.
S>>Даже ваши сентенции по поводу предполагаемого nginx-а в качестве предшествующего reverse proxy, совершенно не по делу, поскольку наличие или отсутствие перед приложением с RESTinio внутри ничего не меняет в позиционировании и целях RESTinio.
MTD>Конечно меняет, nginx серьезный отлаженный продукт созданный опытными людьми, там уже 100 раз обошли все грабли, про которые вы пока даже не в курсе.
Еще раз, специально для вас, вдруг дойдет: есть C++ приложение, которое должно выставить наружу REST API или простой HTTP вход. В это приложение будут приходить запросы по протоколу HTTP. И приложению совершенно безразлично, будут ли запросы приходить напрямую от клиента, или же их будет выдавать какой-то load balancer или reverse proxy перед приложением. RESTinio решает задачу простого, безболезненного, но эффективного встраивания этого самого HTTP-входа в C++ приложение.
Все. Именно для этого RESTinio и сделан.
Хотите иметь перед своим приложением "серьезный отлаженный продукт созданный опытными людьми" -- пожалуйста, никто вам не запретит. Только вот nginx не поможет вам реализовать HTTP-вход в само приложение (если только вы не будете делать этот самый вход через (fast)CGI или через модули самого nginx-а).
Re[3]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Websock с
Здравствуйте, so5team, Вы писали:
S>При этом пользователю будут доступны и restinio::websocket::basic, и restinio::websocket::easy.
S>По остальным вопросам ответим позже.
Здравствуйте, so5team, Вы писали:
S>Да, вы "малолетний дебил" (с). Вот и весь конструктивный итог общения с вами в данной теме.
Евгений, то что у вас так сильно бомбит лично меня веселит, но настораживает, что о своем здоровье вы как-то не думаете. Если из-за возгорания, не дай бог вы нас покинете (форум, например, в очередной раз), кто еще будет нас радовать смешными и бесполезными велосипедами?
MTD>>Конечно меняет, nginx серьезный отлаженный продукт созданный опытными людьми, там уже 100 раз обошли все грабли, про которые вы пока даже не в курсе.
S>Еще раз, специально для вас, вдруг дойдет: есть C++ приложение, которое должно выставить наружу REST API или простой HTTP вход. В это приложение будут приходить запросы по протоколу HTTP. И приложению совершенно безразлично, будут ли запросы приходить напрямую от клиента, или же их будет выдавать какой-то load balancer или reverse proxy перед приложением.
Даже студенты начинают подозревать, что в реальном мире все не так просто и сервер, который отлично работал в своей локалке, отчего-то вдруг начинает работать плохо в бою. Но только не прирожденный эксперт по всему на свете.
S>RESTinio решает задачу простого, безболезненного, но эффективного встраивания этого самого HTTP-входа в C++ приложение.
Не уверен, что решает. Пока никаких реальных проектов на вашем фрейворке я не видел, а отсутствие у вас опыта в данной области не может не настораживать.
Re[24]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Евгений, то что у вас так сильно бомбит лично меня веселит, но настораживает, что о своем здоровье вы как-то не думаете. Если из-за возгорания, не дай бог вы нас покинете (форум, например, в очередной раз), кто еще будет нас радовать смешными и бесполезными велосипедами?
Поражает Ваша уверенность в том, что беседу с Вами ведет исключительно Евгений. Между тем, это объясняет Вашу способность судить и о продукте по косвенным факторам, и о причастности к этому продукту людей, отметившихся в этой теме.
Раз уж попытки перейти в конструктивное русло не оказались успешными, то может быть просто прекратите этот троллинг?
Re[25]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Поражает Ваша уверенность в том, что беседу с Вами ведет исключительно Евгений.
Тут либо у Евгения ко всему прочему еще и раздвоение личности, либо Евгению, если он не хочет чтобы о нем думали как о неуравновешенном хаме с детскими комплексами, то не надо давать писать непонятно кому.
S>может быть просто прекратите этот троллинг?
Я никого не тролю, просто наблюдаю за поциентом — хобби у меня такое, а уж поциент раскрывается сам — на отличненько.
Re[26]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Тут либо у Евгения ко всему прочему еще и раздвоение личности, либо Евгению, если он не хочет чтобы о нем думали как о неуравновешенном хаме с детскими комплексами, то не надо давать писать непонятно кому.
Просто смиритесь с тем, что из под so5team пишет несколько человек, в зависимости от того, в чьей зоне ответственности находится вопрос. Поэтому пытаясь плюнуть в одного конкретного человека, который, как вам кажется, сейчас с вами общается, вы рискуете попасть совершенно в другого.
Остается надеяться, что сей простой факт вы сможете понять, в отличии от более сложных вещей, таких как цели и задачи RESTinio.
Re[26]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Тут либо у Евгения ко всему прочему еще и раздвоение личности, либо Евгению, если он не хочет чтобы о нем думали как о неуравновешенном хаме с детскими комплексами, то не надо давать писать непонятно кому.
MTD>Я никого не тролю, просто наблюдаю за поциентом — хобби у меня такое, а уж поциент раскрывается сам — на отличненько.
А какой у Вас опыт в этом хобби? Почему Вы считаете, что способны прийти к правильным выводам в результате своих наблюдений? Например, бегло пробежавшись по Вашим комментариям, мне показалось, что многое, о чем Вы говорили в предыдущем комментарии, справедливо и для Вас.
Re[27]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, so5team, Вы писали:
S>Почему Вы считаете, что способны прийти к правильным выводам в результате своих наблюдений?
Сделать правильные выводы целью моих наблюдений не является, я просто наслаждаюсь видом беснующегося поциента. С утра ему похоже немного полегчало, но вчера под вечер обострение было — залюбуешься.
S>мне показалось
Говорят в таком случае в церкви помочь могут, сам не пробовал, за что купил, как говорится.
Re[28]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Типа если надо оппонета дебилом назвать — это зона ответственности одного, а если мудаком — то другого? Да вы там упоролись
Ну, если оппонент на всех производит одинаковое впечатление... Если оппонент тупит как дебил, а ведет себя как мудак, то что уж поделать.
S>>Остается надеяться, что сей простой факт вы сможете понять, в отличии от более сложных вещей, таких как цели и задачи RESTinio.
MTD>А что там сложного?
Ну вот вам-то почему-то не понятно. Хотя, действительно, что там сложного. Тем не менее:
Каково ваше позиционирование фреймворка? Какова его ниша?
И хотя вам все несколько раз объяснили, вы все равно демонстрируете непонимание. Если это не дебилизм, то что, троллинг?
Re[28]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Сделать правильные выводы целью моих наблюдений не является
Именно поэтому Вы решили, что резкость в высказываниях является отражением эмоционального состояния "поциента".
MTD>Говорят в таком случае в церкви помочь могут, сам не пробовал, за что купил, как говорится.
В одном случае Вы занимаетесь деятельностью, не делая никаких выводов о результатах этой деятельности, в другом случае Вы предоставляете информацию, не подкрепленную никаким опытом или фактами.
Безусловно, у нас мог бы получиться конструктивный диалог, и очень жаль что техническая тема скатилась в область троллинга. Мы обязательно сделаем выводы и постараемся в следующий раз более взвешенно отвечать на Ваши вопросы, если конечно же Вы не потеряете интерес к нашей разработке.
Re[2]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Websock с
Здравствуйте, m2l, Вы писали:
m2l>Вы там хоть с MTD и немного подискутировали, но идея сравнения с аналогами здравая. Добавьте в Overview сравнение с 5-7 ближайшими аналогами.
Добавим со временем. В частности, такое сравнение мало кому интересно без результатов бенчмарков. А разработка бенчмарков -- это отдельная большая задача (к тому же не сильно благодарная). Мы начали эту работу некоторое время назад (тыц), сейчас обновляем его для использования с последними стабильными версиями фреймворков и, возможно, добавлением туда еще нескольких.
Re[32]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, Слава, Вы писали:
С>Скажите, а почему вы постоянно суёте этот ваш бжынн.... джын... дрын-дрын-дрын... о, проперделся наконец-то, завёлся, этот ваш nginx джинкающий? Почему не apache httpd, не g-wan?
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, MTD, Вы писали:
MTD>>Завязывайте заливать — слово конструктивный вы трактуете по своему.
S>Вообще-то имеем полное право
Трактовать слово по своему или заливать? Нет, не имеете. Трактовать слова не надо — для этого словари есть, заливать тоже взрослому человеку не красиво.
S>Замените "нравится ответ" на "можем ли что-то использовать для улучшения RESTinio" и тогда ваше предложение окажется верным.
Я вам начал давать такую информацию, но у вас так пригорело, что вместо того чтобы вежливо попросить пояснить, вы устроили цирк.
S>Ну а то, что вы упорно продолжаете гадить в тему
Пока один в туалет отошел, сел другой? Или в голове рокировка? Вы же сами говорили, что черный PR — это ок, а теперь обида.
Re[34]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>>>Завязывайте заливать — слово конструктивный вы трактуете по своему.
S>>Вообще-то имеем полное право
MTD>Трактовать слово по своему или заливать? Нет, не имеете. Трактовать слова не надо — для этого словари есть, заливать тоже взрослому человеку не красиво.
Еще раз: мы, как разработчики презентуемой библиотеки, имеем право оценивать полезность ваших слов для дальнейшего развития библиотеке. Имеем полное право. И если мы вам говорим, что в ваших словах для нас нет конструктива, то это означает, что либо его там нет, либо вы не смогли его нам показать.
Вот так обстоят дела. Нравится ли вам это или нет. Считаете ли вы, что мы трактуем что-то не так или заливаем -- это не имеет значения. Но дела обстоят именно так. Мы даем оценку тому, что вы говорите. Мы.
S>>Замените "нравится ответ" на "можем ли что-то использовать для улучшения RESTinio" и тогда ваше предложение окажется верным.
MTD>Я вам начал давать такую информацию,
Не было такой информации. Было вот что:
> Это не совсем то, что требуется в продакшене. > это все равно не позволит отличить честного пользователя с модемом от злоумышленника. > И это только одна из множества потенциальных проблем
С эпическим сливом:
> Сначала, хотел написать развернутый ответ, потом подумал, что у меня тоже опыта маловато
Даже вот это ваша, якобы конструктивная точка зрения:
> Почему бы просто не взять nginx — отлаженный сервер, который уже умеет все что нужно и делает это хорошо, надо только написать конфигурацию. Далее, пусть он сам работает с https, защищает от всяких нежданчиков и перенаправляет http трафик на нужный порт, а там уже пусть будет ваш сервер. В принципе удобный роутинг с асинхронными обработчиками — good enough, тут я вижу место для вашего фреймворка
не несет для RESTinio никакой полезной информации, о чем вам уже неоднократно сообщали.
Ну а это уже вообще эпично:
> Я даже не смотрел. Что у вас за мания величия, будто все только и жаждут покопаться в том, что вы там произвели в муках.
Т.е. вы полезли "с конструктивом" в тему, с которой даже не соизволили ознакомиться.
MTD> но у вас так пригорело, что вместо того чтобы вежливо попросить пояснить, вы устроили цирк.
Да пока что горит разве что у вас.
Re[36]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
MTD>Я тоже даю вам оценку. Я.
Это понятно. Вы этим здесь очень давно занимаетесь. Пользы для RESTinio от этого сколько?
MTD>На той стадии я просто задал вопросы о продукте про который ничего не знаю, если бы я заинтересовался полез бы смотреть, но после того, как у вас полыхнуло факелом, понял — очередное творение непризнанного гения.
А покажите пальцем, где именно у кого-то что-то полыхнуло? Ссылку на сообщение, например.
Re[38]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Webso
Здравствуйте, MTD, Вы писали:
S>>Это понятно. Вы этим здесь очень давно занимаетесь. Пользы для RESTinio от этого сколько?
MTD>Вам видней, что касается моего мнения — думаю, что никакой,
И когда мы говорим, что конструктива в ваших словах ноль, то оказывается, что мы врем и наговариваем. ok.jpg
S>>А покажите пальцем, где именно у кого-то что-то полыхнуло? Ссылку на сообщение, например.
MTD>Началось все здесь:
Здравствуйте, so5team, Вы писали:
MTD>>Вам видней, что касается моего мнения — думаю, что никакой,
S>И когда мы говорим, что конструктива в ваших словах ноль, то оказывается, что мы врем и наговариваем. ok.jpg
Давно уже, как же до вас медленно доходит. Диалог наш стал неконструктивен буквально со второго вашего ответа.
S>
Истерика? Водички выпей
Re[2]: fir: другая HTTP/WebSocket либа с zero-copy внутри без п
Здравствуйте, pkl, Вы писали:
pkl>Нет привязки к boost или другой сетевой библиотеке, на нижнем уровне лежит класс TCP сервера, реализованный на epoll, но можно подменить что угодно своё с похожим API.
Т.е. из коробки работает только под Unix-ами, правильно?
Re[2]: RESTinio 0.3: header-only C++14 библиотека с HTTP/Websock с
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, pkl, Вы писали:
pkl>>Нет привязки к boost или другой сетевой библиотеке, на нижнем уровне лежит класс TCP сервера, реализованный на epoll, но можно подменить что угодно своё с похожим API.
S>Т.е. из коробки работает только под Unix-ами, правильно?
Да.
Но у windows есть какие-то адаптеры, я слышал даже ubuntu внутри винды есть. https://habrahabr.ru/post/280560/
Да и как-то в целом винда как сервер не так уж критична, всё больше в линуксах народ в мире серваки делает, поэтому затачиваться под epoll можно с настолько чистой совестью, что вода в байкале позавидует!
Ну и написать свой классик под заданный интерфейс https://github.com/pavelkolodin/fir/blob/master/net/tcp_server_epoll.h несложно.
Re[4]: fir: другая HTTP/WebSocket либа с zero-copy внутри без п
Вопрос задавался как бы с позиции потенциального пользователя, которому нужна кросс-платформенность "из коробки". Далеко не все возьмут чужой инструмент, если для него нужно еще что-то самостоятельно допиливать. Мы как раз делали RESTinio для того, чтобы допиливать ничего не нужно было.
Re[2]: fir: другая HTTP/WebSocket либа с zero-copy внутри без п
Здравствуйте, pkl, Вы писали:
pkl>Входной HTTP/1.1 протокол парсится с минимальным кол-вом копирований данных. pkl>Распарсенный HTTP представляет собой просто набор указателей на разные места во входном буфере, куда данные залетели изначально. pkl>Нет привязки к boost или другой сетевой библиотеке, на нижнем уровне лежит класс TCP сервера, реализованный на epoll, но можно подменить что угодно своё с похожим API. pkl>Написано по мотивам внутренностей nginx. Минимум new/delete, всё переиспользуется.
Крайне интересно звучит. Какие планы по развитию или чисто just for fun? Обработчики запросов где и как обрабатываются?
Re[4]: fir: другая HTTP/WebSocket либа с zero-copy внутри бе
Здравствуйте, pkl, Вы писали:
pkl>В целом fir надо немного отрефакторить, там часть написана когда я ещё малолетним дебилом был — под c++14 надо причёсывать, про кеш CPU подумать, lock-free внедрить, мьютексов дурацких повыкидывать если есть...
прежде всего автотесты нужны.
автотесты — это программки, которые говорят OK/FAIL при запуске. а те тесты, что в репе лежат, лучше удалить
Мы обновили свою легковесную C++14 библиотеку для встраивания HTTP-входа в C++ приложения до версии 0.4.3.
Основные изменения в RESTinio со времени последнего анонса:
новые варианты restinio::run(), позволяющие задать внешний asio::io_context для RESTinio;
добавлена поддержка sendfile (https://stiffstream.com/en/docs/restinio/0.4/sendfile.html);
request_id теперь доступен внутри обработчика входящего HTTP-запроса;
плюс несколько мелких изменений и улучшений в коде самого RESTinio.
Мы создавали RESTinio для того, чтобы иметь возможность асинхронной обработки входящих запросов в случаях, когда для формирования ответа нужно обратиться к медленно отвечающему стороннему сервису. Иногда обращения к таким сторонним сервисам нужно делать посредством HTTP. Для таких целей широко используется Си-шная библиотека libcurl. Подружить асинхронную обработку входящих запросов посредством RESTinio с асинхронной обработкой исходящих запросов посредством libcurl можно несколькими способами. Подробнее эту тему мой коллега раскрыл в небольшой серии статей: часть 1, часть 2, часть 3.
Развитие RESTinio продолжается. У нас есть свои идеи о том, что можно было бы добавить в следующих версиях библиотеки. Но нам было бы очень интересно услышать пожелания от тех, кто смотрел на RESTinio, но еще не начал её использовать:
что бы вам хотелось увидеть в RESTinio?
чего не хотелось бы видеть?
что останавливает вас от использования RESTinio?
Набор cmake-файлов для сборки и использования RESTinio улучшены в соответствии с рекомендациями по modern cmake. Подробне смотри: CMake.
RESTinio доступен через vcpkg. Теперь вы можете использовать RESTinio с помощью команды вида
$ vcpkg install restinio
Часть функций API переработана так, чтобы получать аргументы в виде string_view вместо ссылки на std::string, что должно уменьшить количество обращений к динамической памяти при работе с RESTinio.
нагляднее про позиционирование и возможное применение. Совсем коротко напомним: RESTinio развивается как инструмент для прикручивания REST API к уже существующему C++ному коду. Особенно, если прикладная обработка запросов занимается сотни/тысячи/десятки тысяч миллисекунд (как в задачах по обработке больших объемов данных) и, поэтому нужен асинхронный HTTP-сервер, который не будет блокировать IO-контексты на время прикладной обработки запроса.
Еще поднималась тема nginx-а перед приложением с RESTinio внутри. Этот сценарий выставления REST API наружу настолько очевиден, что его не было смысла даже обсуждать. Как раз для демо-страничка для shrimp-а подобным образом и организована: наружу смотрит nginx с SSL-ем, а за ним стоит C++ное приложение с RESTinio внутри.
Re[2]: Пример проекта, который использует RESTinio
Здравствуйте, so5team, Вы писали:
S> Поддержка Boost::ASIO. Boost::ASIO, начиная с версии 1.66, включает в себя изменения, сделанные ранее в stand-alone версии ASIO, поэтому стало возможным добавить интеграцию с Boost версией ASIO, которую мы собираемся поддерживать и в дальнейшем. Подробнее смотрите в документации.
А Boost.Beast не смотрели, можете что нибудь рассказать, про сравнение с этой библиотекой.
Re[2]: fir: другая HTTP/WebSocket либа с zero-copy внутри без п
Добавлены нотификаторы о статусе записи данных. Нужно определить был ли ответ отправлен и каков статус записи данных в сокет? Тогда используйте нотификаторы:
Здравствуйте, so5team, Вы писали:
S>Автор Boost.Beast будет делать доклад на CppCon-2018 для которого он подготовил небольшой пример на базе Boost.Beast-а. S>Мы, для сравнения выразительности и удобства использования двух библиотек, сделали тот же самый пример, но на базе RESTinio:
Здравствуйте, kaa.python, Вы писали:
S>>Автор Boost.Beast будет делать доклад на CppCon-2018 для которого он подготовил небольшой пример на базе Boost.Beast-а. S>>Мы, для сравнения выразительности и удобства использования двух библиотек, сделали тот же самый пример, но на базе RESTinio:
KP>Осталось рассказать об этом на CppCon
Пока участвовать в заграничных конференциях у нас не получается по ряду более чем объективных причин. Поэтому пока распространяем информацию посредством Интернета.
Re: v.0.5.0: возможность работы с кастомными версиями http-parser
Со времени последнего анонса в RESTinio было исправлено несколько ошибок и было добавлено несколько новых фич. В частности, в версии 0.5.0 добавлена возможность работы RESTinio с кастомизированными версиями библиотеки http-parser. Это позволяет реализовать обработку в RESTinio нестандартных HTTP-методов.
Допустим, что следует написать REST-сервис, который должен реагировать на нестандартные методы ENCODE и DECODE. Для этого потребуется:
сделать форк http-parser, в котором реализуется распознавание методов ENCODE и DECODE (в результате чего в кастомизированном http-parser появляются значения HTTP_ENCODE и HTTP_DECODE);
определить в своем коде две константы типа restinio::http_method_id_t:
указать имя собственного типа с методом from_nodejs в свойствах HTTP-сервера:
struct my_server_traits : public restinio::default_traits_t {
using http_methods_mapper_t = my_http_methods_mapping;
};
После этого можно будет использовать константы http_encode и http_decode при работе с RESTinio, например:
auto make_request_handler() {
auto router = std::make_unique< restinio::router::express_router_t<> >();
router->add_handler(http_encode, "/data", [](auto req, auto params) {...});
router->add_handler(http_decode, "/data", [](auto req, auto params) {...});
...
return router;
}
Примечание. Для реализации этой функциональности из RESTinio был удален тип http_method_t, а вместо него введен тип http_method_id_t. Если в вашем коде использовался http_method_t, то при обновлении на v.0.5.0 вам придется внести изменения в свой код.
Также в версии 0.5.0 был удален ряд вещей, которые были помечены как "deprecated" в предыдущих версиях RESTinio.
Здравствуйте, Denis Ivlev, Вы писали:
S>>Со времени последнего анонса в RESTinio было исправлено несколько ошибок
DI>Прочитал как "наделано ошибок". Простите)
Да вы своим ослоумием и "полезными" комментариями здесь резко выделяетесь, так что продолжайте. Публике нужны развлечения.
Re[5]: v.0.5.0: возможность работы с кастомными версиями http-parser
Здравствуйте, Denis Ivlev, Вы писали:
DI>А что ты так завелся?
Кто завелся?
DI>Ты же искал своей поделке внимание — ну так вот оно, что не так?
Идиотский комментарий от человека, уже успевшего себя зарекомендовать специфическим образом.
В двух словаях: не каждый фидбэк одинаково полезен.
DI> кстати, интересно за "ослоумие" тебя забанят или ты и есть специальный шут, которому позволительно хамить?
А вы пожалуйстесь модератору, посмотрите, что получится.
Мы внимательно прислушиваемся к замечаниям и просьбам пользователей. Например, функциональность для поддержки file upload появилась в результате такой просьбы. Так что если вам чего-то не хватает в RESTinio, то дайте нам об этом знать. Либо через Issues на GitHub-е, либо через Google-группу.
Выпустили очередное обновление для RESTinio. В версии 0.6.7.1, кроме нескольких баг-фиксов, добавились:
Дополнительные опции для настройки CMake-сборок: RESTINIO_USE_EXTERNAL_EXPECTED_LITE, RESTINIO_USE_EXTERNAL_OPTIONAL_LITE, RESTINIO_USE_EXTERNAL_STRING_VIEW_LITE, RESTINIO_USE_EXTERNAL_VARIANT_LITE.
Вспомогательная функция run_async для упрощения запуска RESTinio-сервера на отдельном пуле потоков или отдельной рабочей нити:
int main() {
auto server = restinio::run_async(
// Задаем io_context для использования.
// В данном случае у сервера будет собственный io_context.
restinio::own_io_context(),
// Параметры для HTTP-сервера.
restinio::server_settings_t{}
.address("127.0.0.1")
.port(8080)
.request_handler(...),
// Размер пула рабочих нитей для HTTP-сервера.
16);
// Если оказались здесь и run_async не выбросил исключения,
// значит HTTP-сервера запущен.
... // Какие-то другие действия.
// Здесь нет необходимости останавливать HTTP-сервер
// вручную, это будет сделано автоматически в
// деструкторе переменной 'server'.
}
Добавлены новые вспомогательные функции для работа значений HTTP-заголовков. На этот раз заголовков Authorization и Proxy-Authorization.
Так же добавлены вспомогательные функции для извлечения из Authorization параметров для Basic и Bearer аутентификаций. Например, для Basic-аутентификации:
#include <restinio/all.hpp>
#include <restinio/http_field_parser/basic_auth.hpp>
...
auto on_request(const restinio::request_handle_t & req) {
using namespace restinio::http_field_parsers::basic_auth;
const auto auth_params = try_extract_params(*req,
restinio::http_field::authorization);
if(auth_params) { // Параметры успешно извлечены.if(is_valid_user(auth_params->username, auth_params->password)) {
...
}
}
...
}